C语言二维数组的内存结构与Java二维数组的内存结构一样吗?还是我对内存的理解有误?
int a[3][2];
java:
C语言:
就像上面图例,我确信C语言的图解是对的,但是在Java中存在第一级别的划分吗?java新手求教!
------解决思路----------------------
即便是和C一样对称长度,如A[2][3] 也不过指的是第3个数组对象的第四个元素而已
存储空间也不像C那样连续有规律
------解决思路----------------------
存在的。
可以做实验:
public static void main(String[] args) {
int[][] arr = new int[3][3];
System.out.println(arr.hashCode());
System.out.println(arr[0].hashCode());
System.out.println(arr[1].hashCode());
System.out.println(arr[0][0]);
}
根据输出可知,arr[0]、arr[1]和arr[2]应是不同的对象,对应三个一维数组;
arr则是另外的对象,对应着你想知道是否存在的那个对象。
按照java的体系来说,此时arr是一个对象,那它一定已经被分配了空间,即实实在在存在的。
另,java可以构建锯齿形数组(即每一维不同长度的数组),也可以证明java中确实存在多维数组对象。