Java-массивы по определению имеют фиксированный размер. Если вам нужен автоматический рост, вы используете классы XXXList.
РЕДАКТИРОВАТЬ - вопрос прояснился немного
Когда я только начинал изучать Java (исходя из C и C ++), это было, вероятно, одной из первых вещей, которые взволновали меня. Надеюсь, я смогу пролить немного света.
В отличие от C ++, массивы объектов в Java не хранят объекты. Они хранят ссылки на объекты.
В C ++, если вы объявили нечто похожее на:
String myStrings[10];
Вы получите 10 строковых объектов. На этом этапе было бы совершенно законно сделать что-то вроде println (myStrings [5] .length); - вы получите '0' - конструктор по умолчанию для String создает пустую строку длиной 0.
В Java, когда вы создаете новый массив, вы получаете пустой контейнер, который может содержать 10 строковых ссылок. Итак, звонок:
String[] myStrings = new String[10];
println(myStringsp[5].length);
выдаст исключение нулевого указателя, потому что вы еще не поместили ссылку String в массив.
Если вы пришли из C ++, подумайте, что новая String [10] эквивалентна новой (String *) [10] из C ++.
Итак, имея это в виду, должно быть достаточно ясно, почему ArrayList является решением для автоматического расширения массива объектов (и фактически ArrayList реализован с использованием простых массивов, со встроенным алгоритмом роста). при этом выделяет новые расширенные массивы по мере необходимости и копирует содержимое из старого в новое).
На практике на самом деле относительно мало ситуаций, когда мы используем массивы. Если вы пишете контейнер (что-то похожее на ArrayList или BTree), тогда они полезны, или если вы выполняете много низкоуровневых манипуляций с байтами - но на уровне, на котором происходит большая часть разработки, используя один из классов Collections безусловно, предпочтительный метод.