在Java中,N维数组的大小会改变吗?

在Java中,N维数组的大小会改变吗?,java,arrays,Java,Arrays,Java中的数组是一个对象。因此,如果我有一个2D数组double[][]matrix=new double[5][5],那么该数组的每一行都是一个引用内存中一维数组的对象。据我所知,一旦用java设置了数组大小,它就无法更改。因此,让我声明一个1D数组double[]d={1,2,3,4,5,6,7,8,9,10}然后允许我设置matrix[1]=d,以便第1行现在指向内存中的d。我觉得数组的大小并不是固定的。我可以将矩阵声明为任意大小,只需将引用更改为指向不同大小的数组。如果矩阵大小固定为5

Java中的数组是一个对象。因此,如果我有一个2D数组
double[][]matrix=new double[5][5]
,那么该数组的每一行都是一个引用内存中一维数组的对象。据我所知,一旦用java设置了数组大小,它就无法更改。因此,让我声明一个1D数组
double[]d={1,2,3,4,5,6,7,8,9,10}
然后允许我设置
matrix[1]=d
,以便第1行现在指向内存中的d。我觉得数组的大小并不是固定的。我可以将
矩阵
声明为任意大小,只需将引用更改为指向不同大小的数组。如果
矩阵
大小固定为5 x 5,为什么允许我这样做

double[][] matrix = new double[5][5];
实际上创建了6个数组对象。一个数组,其元素类型为
double[]
(即双数组数组数组),长度为5,并由
矩阵
变量引用;以及5个数组,其元素类型为
double
,长度为5,并由
矩阵[0]…矩阵[4]
引用

正如您可以更改
矩阵
变量以引用新数组,方法是分配:

matrix = new double[10][10];
matrix[i] = new double[6];
您还可以通过指定以下内容来更改任何引用
矩阵[i]
,以引用新数组:

matrix = new double[10][10];
matrix[i] = new double[6];

您没有更改任何现有阵列。您正在将引用一个数组的引用变量的值更改为引用另一个数组。

简单地说:因为Java的祖先就是这样创建数组的

这里的语法给出了一个提示:

double[][] matrix = new double[5][5]
你看,5,5只显示在右手边!含义:数组维度不是矩阵“类型”的一部分

关键是:Java中没有真正的“多维”数组。没有办法说:这个东西应该是“5x5”。您总是以“行”数组结束;每行包含一个列数组。因此,这些列可以具有不同的长度,因为它们彼此完全独立

这有点误导。“矩阵”是对数组的引用(对任何变量都是如此……它是对某个对象的引用,而不是对象本身)——您始终可以System.arrayCopy并将结果分配给矩阵(即使指向的原始数组矩阵的大小是固定的)