Я думаю автор сказал что перечисления зло — потому что они создают проблему с управлением версиями.
При добавлении новых констант в перечисление приходится перекомпилировать код использующий его.
А так спору нет — это полезная штука…
// The Empty constant holds the empty string value.
//We need to call the String constructor so that the compiler doesn't mark this as a literal.
//Marking this as a literal would mean that it doesn't show up as a field which we can access from native.
public static readonly String Empty = "";
Это сделано для доступа к полю из неуправляемого(native) кода.
По не воле вспомнилось высказывание: «Если бы в Java действительно работала сборка мусора, большинство программ бы удаляли сами себя при первом же запуске».
Структуры располагаются в стеке потока, а не в куче, в следствии чего не требуется освобождение памяти сборщиком мусора.
В Java есть примитивы(byte, short, int, float,...) это аналоги структур в .NET (они располагаются в стеке). Однако нет возможности создать пользовательский тип который бы располагался в стеке.
Конечно старые строки будут освобождаться сборщиком мусора. Имелось виду, что на создание строки потребуется памяти пропорционально квадрату длины, а не то что она будет использовать столько памяти.
Во-первых это не бред. Мой вывод был сделан на основании реализации метода substring который до последней версии возвращал ссылку на текущий массив символов.
Во-вторых это не реклама и тем более не грязная реклама. Ведь никто не говорит, что в .NET строки реализованы лучше чем в Java!
В-третьих не думаю, что в Sun/Oracle работают тупые люди.
В-четвертых реализация строкового типа в последней версии Java поменялась и теперь она похожа на поведение в .NET.
Здесь создается анонимный тип с одним свойством Items являющийся структурой (поскольку у List a итератор реализован в виде структуры). Далее при каждом обращении к свойству Items в цикле будет возвращена копия именно поэтому мы зациклимся.
При добавлении новых констант в перечисление приходится перекомпилировать код использующий его.
А так спору нет — это полезная штука…
// The Empty constant holds the empty string value.
//We need to call the String constructor so that the compiler doesn't mark this as a literal.
//Marking this as a literal would mean that it doesn't show up as a field which we can access from native.
public static readonly String Empty = "";
Это сделано для доступа к полю из неуправляемого(native) кода.
В Java есть примитивы(byte, short, int, float,...) это аналоги структур в .NET (они располагаются в стеке). Однако нет возможности создать пользовательский тип который бы располагался в стеке.
(n2+n) / 2 = O(n2)
Во-вторых это не реклама и тем более не грязная реклама. Ведь никто не говорит, что в .NET строки реализованы лучше чем в Java!
В-третьих не думаю, что в Sun/Oracle работают тупые люди.
В-четвертых реализация строкового типа в последней версии Java поменялась и теперь она похожа на поведение в .NET.