为什么第二维在java中的2d数组中不是必需的?

时间:2017-08-09 05:17:55

标签: java

int a[][]=new int[2][]; // It works without any error

为什么此代码段中缺少第二个维度?

3 个答案:

答案 0 :(得分:6)

从技术上讲,2D数组是一个数组数组。您指定的代码会告诉您希望拥有多少个数组。

您可以按如下方式进一步初始化:

int a[][] = new int[2][];
a[0] = new int[3];
a[1] = new int[5];

new int[2][2]这样的东西只不过是上面代码的精简版本。

答案 1 :(得分:2)

这不是强制性的,因为不需要第二个维度来计算保存数组所需的内存量。

比较以下内容:

int[] a = new int[2];

在这种情况下,需要指示JVM为一个包含两个整数的数组分配空间。

另一方面:

int[][] = new int[2][];

在这种情况下,需要指示JVM为两个对整数数组对象的引用分配空间。这些整数数组对象最终的大小并不重要,因为它不会改变引用的大小。

实际上,这两个数组可以有不同的大小,甚至根本不会创建。

答案 2 :(得分:2)

数组中的第二个维度是Java中的可选。您可以创建二维数组而不指定两个维度,例如int [4] []是有效的数组声明。

背后的原因是Java不支持真正意义上的多维数组。在一个真正的二维数组中,数组的所有元素都占用连续的内存块,但在Java中却不是这样。

相反,多维数组是数组的数组。例如,Java中的二维数组只是一维数组的数组,如String [] []是一个String []或“数组字符串数组”数组的数组。此图显示了二维数组在Java中的存储方式:enter image description here