Why are Java arrays fixed length?

不问归期 提交于 2019-12-07 05:48:01

问题


int[] array = new int[10]; // Length is fixed when the array is created.

The length of an array is established when the array is created. After creation, its length is fixed.

Why does it have to be so?


回答1:


As other answers have noted, fixed size is part of the definition, and you'd have to talk to the original authors to find the truth.

But as a general point, it is significantly more complex to implement a variable-length container, and there are a number of strategies for achieving it under the hood (linked list, memory re-allocation ...).

Had the authors defined arrays to be variable-length back in the early 1990s, there would have been several unwanted consequences:

  • the core JVM definition of arrays would be far more complex, and all implementations would be forced to provide this complexity at a low level;
  • there would be a "one-size fits all" resizing implementation in a given JVM, which might fail to satisfy many use-cases;
  • different implementations are likely to introduce large performance variances, which might need additional complicated constraint definition;
  • it introduces thread-safety issues around bounds-checking the array, because a.length becomes mutable;
  • additional linguistic support for expressing expansion => larger language;
  • performance implications for array subscripting, potential lack of O(1) indexing;
  • unfamiliar territory for C and C++ programmers, who are used to non-extensible arrays (or having such mechanisms provided in libraries);
  • casting in stone a variable-length mechanism already adequately handled by higher-level structures (java.util.Vector back in the day, and now Java Collections, Guava etc).

To sum up, arrays in the C-language family from which Java was born are broadly expected to be simple tools for building higher-level structures - back then, there was zero surprise at the fixed size restriction. We now have a choice of implementations of such structures (LinkedList, ArrayList, etc) which provide a selection of runtime behaviours, and most devs use those abstractions.




回答2:


That's in the definition of Java arrays:

An array is a container object that holds a fixed number of values of a single type

(see here).

Use an ArrayList for a variable-sized array implementation.



来源:https://stackoverflow.com/questions/35846527/why-are-java-arrays-fixed-length

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!