Ответ
Массивы в Java имеют фиксированный размер, потому что память под них выделяется непрерывным блоком при создании. Это обеспечивает константное время доступа O(1) к элементам по индексу, но делает невозможным изменение размера без пересоздания объекта.
Почему так спроектировано?
- Производительность: Непрерывное расположение в памяти позволяет процессору эффективно кэшировать данные.
- Простота: Управление памятью и вычисление смещения (
array[index] = base_address + index * element_size) становятся тривиальными.
Альтернатива для динамического размера: Используйте ArrayList<T> (или другие реализации List), которые внутри управляют массивом и автоматически увеличивают его емкость при необходимости.
// Фиксированный размер
int[] fixedArray = new int[10];
fixedArray[0] = 5; // OK
// fixedArray.length = 20; // Невозможно
// Динамический размер
ArrayList<Integer> dynamicList = new ArrayList<>();
dynamicList.add(5); // Внутри может создаться новый массив и скопироваться данные