为什么Java数组固定长度?

Hic*_*aid 5 java arrays fixed

int[] array = new int[10]; // Length is fixed when the array is created.
Run Code Online (Sandbox Code Playgroud)

创建数组时,将建立数组的长度.创建后,其长度是固定的.

为什么必须这样?

Sus*_*anW 8

正如其他答案所指出的那样,固定大小是定义的一部分,你必须与原作者交谈才能找到真相.

但是作为一般观点,实现可变长度容器要复杂得多,并且有很多策略可以实现它(链表,内存重新分配...).

如果作者在20世纪90年代早期将数组定义为可变长度,则会产生一些不必要的后果:

  • 数组的核心JVM定义会复杂得多,并且所有实现都将被迫在低级别提供这种复杂性;
  • 在给定的JVM中会有一个"一刀切"的大小调整实现,这可能无法满足许多用例;
  • 不同的实现可能会引入大的性能差异,这可能需要额外的复杂约束定义;
  • 它引入了边界检查数组的线程安全问题,因为它a.length变得可变;
  • 表达扩展的额外语言支持=>更大的语言;
  • 数组下标的性能影响,可能缺乏O(1)索引;
  • 对C和C++程序员来说不熟悉的领域,他们习惯于不可扩展的数组(或者在库中提供这样的机制);
  • 铸造一个可变长度机制已经由更高级别的结构(java.util.Vector当天回来,现在是Java Collections,Guava等)充分处理.

总而言之,人们普遍认为Java诞生的C语言系列中的数组是构建更高级别结构的简单工具 - 当时,固定大小限制并没有出乎意料.我们现在可以选择这种结构(LinkedList,ArrayList等)的实现,它们提供了一系列运行时行为,大多数开发人员都使用这些抽象.


Men*_*ena 1

这是 Java 的定义array

数组是一个容器对象,它保存固定数量的单一类型的值

(看这里)。

使用 anArrayList来实现可变大小的数组。