Java 与 C++ 中的二维数组
C++中定义二维数组时,只允许简写为 int arr [ ][3] = {1,2,3,4,5},即只允许缺省二维数组的个数,因为可在元素列表中得出二维数组个数 = 2;
而Java中可以出现 int [ ][ ] arr = new [3] [ ] , 因为要结合上图理解, 它是先分配二维数组的内存,一维数组的地址可以为 null ( 注意 : 若在此时访问arr [0] [0] ,编译可以通过, 但运行输出为 :NullPointerException ), 可在之后动态分配空间, 如 arr [0] = new int [4], 才分配给一维数组一个地址。
在 C / C++ 中,定义的变量所需的空间都是分配在栈上的, 而 new 所需要的空间都是分配在堆上的, 在栈上的变量必须在代码中明确指出大小, 所以在 C / C++ 中定义数组必须指定大小。
而 Java 中所有的变量都是引用, 换个角度理解就是 C++ 中的指针, 所以在 Java 中变量的空间都是后期分配的。 Java 的二维数组和一维数组的内存其实是分开分配的, 而 C++ 中二维数组的内存其实就是一维数组的内存所组成的。
参考:
《Java核心技术卷Ⅰ》
如果大家喜欢这篇文章的话,希望大家收藏、转发、关注、评论、点赞,转载请注明出自这里。 PS:本随笔属个人学习小结,文中内容有参考互联网上的相关文章。如果您博文的链接被我引用,我承诺不会参杂经济利益;如果有版权纠纷,请私信留言。其中如果发现文中有不正确的认知或遗漏的地方请评论告知,谢谢! 还是那句话:不是我喜欢copy,是站在巨人的肩膀上~~