我一直很困惑,为什么Java中的2D数组对声明行而不是列的大小有严格的要求,这进一步混淆了3D和4D数组。
// Invalid, 2D array with no row and no column?
int[][] arr = new int[][];
// Valid, 2D array of size 2X3
int[][] arr = new int[2][3];
// Valid, column size is not specified, size of 2D array?
int[][] arr = new int[2][];
// Valid, column size is not specified, size of 3D array?
int[][][] arr = new int[2][][];
它允许您延迟关于列数的决策,并为不同的行定义不同的列数。
例如:
int [][] arr = new int[2][];
arr[0] = new int[5];
arr[1] = new int[3];
数组的第一行有5列,但第二行只有3列。如果在声明二维数组时指定列数,则这是不可能的。
如果你把多维数组想象成一维数组,其元素本身就是较低维度的数组,那么可能会变得不那么令人困惑。
因此,2维int数组(int[][]
(是元素为int
数组(int[]
(的1维数组。
您可以通过指定元素的数量来实例化此数组:
int[][] arr = new int[2][];
它为您提供了一个由两个int[]
元素组成的数组,其中2
元素被初始化为null
。
这类似于初始化某个引用类型的数组:
Object[] arr = new Object[2];
它为您提供了一个由两个Object
元素组成的数组,其中2
元素被初始化为null
。
new int[2][3]
实例化实际上是一种特殊情况,因为它实例化了外部阵列(具有2个元素的阵列(和内部阵列(每个阵列具有3个元素(,它们都是外部阵列的元素。
您可以在末尾添加大括号{}
。这是有效的,一个没有行和列的空2D数组:
int[][] arr = new int[][]{};
另请参阅:
•初始化仅具有行数的2D阵列
•Java中的数组声明和初始化