Pav*_*nko 6 java arrays multidimensional-array
好奇为什么在 Java 中声明一个非空数组的空数组是合法的:
int[][] array = new int[0][1];
System.out.println(array[][0]); //won't compile.
System.out.println(array[0][0]) //triggers an out of bounds exception.
Run Code Online (Sandbox Code Playgroud)
PS 我已经阅读了关于零大小数组的相关问题:为什么 Java 允许大小为 0 的数组?
这是出于同样的原因吗?
一般来说,定义空数组是合法的,无论它包含什么。因此,拥有一个包含非空数组的空数组也是合法的。
从数学(群论)角度来说,空数组不仅合法,而且是必要的,因为它们代表数组串联操作的零(或中性)元素。这也使得它对于编程很有用(参见下面的示例)。
在您的示例中,您基本上会探测是否可以访问空数组的元素。这当然是不合法的,因为根本不存在。但是你可以这样做:
int[][] array = new int[0][1];
System.out.println(array.length);
Run Code Online (Sandbox Code Playgroud)
参考我自己上面的例子,一个比较有用的案例是:
int[][] array1 = new int[1][1];
int[][] array2 = new int[0][1];
array1[0][0] = 1;
int [][] concat = Stream
.concat(Arrays.stream(array1), Arrays.stream(array2))
.toArray(int[][]::new);
System.out.println(Arrays.deepToString(concat));
Run Code Online (Sandbox Code Playgroud)
因此,空数组允许“好”代码,无需if排除非法情况,这实际上完全没问题。