在java数组中,可以把一个低维数组赋给更多维数的数组,比如:int[][] a = new int[3][4];
int[][] b = new int[2][6];
int[][][] c = new int[4][][];
c[1] = a;
c[2] = b;这是可以理解的,因为只对c的最高维进行的初始化,那样最高维的元素可以指向任意的二维数组,但是请看下面的情况:
int[][] a = new int[8][9];
int[][] b = new int[2][6];
int[][][] c = new int[4][2][1];
c[1] = a;
c[2] = b;这样赋值也是同样可行的,我就觉得很奇怪了,上面那个例子可行是因为c的后二维没有初始化,而这里已经做了完全的初始化,对数组的每一维都指定了明确的大小,也就是说,空间已经分配了,默认值0也赋给了每一个元素,这时候为什么还是可以指向任意的二维数组呢?那原来分配好的空间是否会被回收?是否可以认为高维元素是类似于指针的参量,所以即使全部初始化,但仍可以指向任意的二维数组呢?
int[][] b = new int[2][6];
int[][][] c = new int[4][][];
c[1] = a;
c[2] = b;这是可以理解的,因为只对c的最高维进行的初始化,那样最高维的元素可以指向任意的二维数组,但是请看下面的情况:
int[][] a = new int[8][9];
int[][] b = new int[2][6];
int[][][] c = new int[4][2][1];
c[1] = a;
c[2] = b;这样赋值也是同样可行的,我就觉得很奇怪了,上面那个例子可行是因为c的后二维没有初始化,而这里已经做了完全的初始化,对数组的每一维都指定了明确的大小,也就是说,空间已经分配了,默认值0也赋给了每一个元素,这时候为什么还是可以指向任意的二维数组呢?那原来分配好的空间是否会被回收?是否可以认为高维元素是类似于指针的参量,所以即使全部初始化,但仍可以指向任意的二维数组呢?
然后你把a句柄付给了这个c[1],c[1]就指向了和a一样的内存了?
我得理解,等高人的答复
这样只是被定义了,并没有分配给c存储空间。等到赋值得时候再给他分配存储空间。
我记得好像是这样,拿不准。错了别见怪1
Object[] a;
a[0] = Object1;
a[0] = Object2;如果 Object1 = new int[8][9];
Object2 = new int[2][6];
a = new int[4][2][1];
就可以解释你的问题了。理解这个问题的关键是多维树组其实是一个Object数组,而Object的类型是维数-1的数组。
a = new int[4][2][1];
相当于
a = new Object[4]; //(Object: int[][])
a[0] = new int[2][1];
a[1] = new int[2][1];
a[2] = new int[2][1];
a[3] = new int[2][1];
后来a[0] = new int[8][9];
结果是把原来a[0]的int[2][1]丢弃了。