Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are Java arrays fixed length?

Tags:

java

arrays

fixed

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?

like image 893
Hicham Moustaid Avatar asked Mar 07 '16 14:03

Hicham Moustaid


1 Answers

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.

like image 179
SusanW Avatar answered Oct 17 '22 01:10

SusanW