简体   繁体   中英

Can the size of an N-dimensional array change in Java?

An array in Java is an object. So if I have a 2D array double[][] matrix = new double[5][5] then each row of that array is an object referencing a single dimensional array in memory. From my understanding, once the array size is set in java it can not be changed. So let me declare a 1D array double[] d = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} I am then allowed to set matrix[1] = d so that row 1 is now pointing to d in memory. I seems like the array size is not really fixed. I can declare matrix to be of any size and just change the reference to point to an array of a different size. Why am I allowed to do this if the matrix size is fixed to be 5 x 5 ?

The assignment

double[][] matrix = new double[5][5];

actually creates 6 array objects. One array whose element type is double[] (ie an array of double arrays) having a length of 5 and referenced by the matrix variable, and 5 arrays whose element types are double having a length of 5 and references by matrix[0]...matrix[4] .

Just as you can change the matrix variable to refer to a new array by assigning :

matrix = new double[10][10];

you can also change any of the references matrix[i] to refer to a new array by assigning :

matrix[i] = new double[6];

You are not changing any existing array. You are changing the value of a reference variable which referred to one array to refer to a different array.

Simply spoken: because that is how the fathers of Java made arrays work.

And the syntax gives a hint there:

double[][] matrix = new double[5][5]

You see, the 5,5 only shows up on the right hand side ! Meaning: the array dimensions are not part of "type" of matrix !

The key thing is: there are no true "multi dimensional" arrays in Java. There is no way to say: this thing should be "5 x 5". You always end up with an array of "rows"; and each row contains an array of columns. And therefore, those columns can have different lengths,as they are completely independent of each other!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM