。。。。。。这个还真是让人吐血啊
那你就想一下二维数组是如何实现的。无非就是在一维数组内再放置一维数组。
以arr[][]为例说明,
如果画内存图的话,肯定是先在堆内存中画一个数组,然后再另外创建一批数组,然后将后面创建的数组的地址值依次赋给arr[0],arr[1].....
创建二维数组对象时,系统是需要分配内存空间的。
如果你不通过int [][]arry=new int[5][];的方式告诉系统第一层数组的长度,那么它怎么知道该为你的第二层数组分配多少个内存空间呢?
只有上面的显式说明,系统才会知道该如何为你的二维数组分配内存:
即首先分配内存给一个长度为5的存放引用类型数据的数组,然后分配内存给5个存放int类型数据的数组。因为在其底层,哪种数据类型该分配多少空间都是规定好的。所以它能够毫无疑问的把这个二维数组的内存空间分配出来。
但是,如果你只是给一个int [][]arry=new int[][];的话,它不知道第二维数组的个数,也就不知道总共该分配给这个二维数组多大的内存空间。
不知这样理解如何? |