为什么Java中的2D/3D数组需要行大小和列大小可选?

为什么Java中的2D/3D数组需要行大小和列大小可选?,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我总是感到困惑,为什么Java中的2D数组对声明行的大小而不是列的大小有严格的要求,这进一步混淆了3D和4D数组 //无效的二维数组,没有行也没有列? int[]arr=新int[]; //大小为2X3的有效二维数组 int[]arr=新int[2][3]; //有效,未指定列大小,二维数组的大小? int[]arr=新int[2][]; //有效,未指定列大小,三维数组的大小? int[][]arr=新int[2][]; 它允许您延迟关于列数的决定,以及为不同的行定义不同的列数 例如: int

我总是感到困惑,为什么Java中的2D数组对声明行的大小而不是列的大小有严格的要求,这进一步混淆了3D和4D数组

//无效的二维数组,没有行也没有列?
int[]arr=新int[];
//大小为2X3的有效二维数组
int[]arr=新int[2][3];
//有效,未指定列大小,二维数组的大小?
int[]arr=新int[2][];
//有效,未指定列大小,三维数组的大小?
int[][]arr=新int[2][];

它允许您延迟关于列数的决定,以及为不同的行定义不同的列数

例如:

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

arr[0] = new int[5];
arr[1] = new int[3];
数组的第一行有5列,但第二行只有3列。 如果在声明二维数组时指定列数,则无法执行此操作

如果您将多维数组视为一维数组,其元素本身就是较低维度的数组,则可能会变得不那么令人困惑

因此,二维int数组(
int[]]
)是一个一维数组,其元素是
int
数组(
int[]

可以通过指定元素数来实例化此数组:

int[][] arr = new int[2][];
它提供了一个包含两个
int[]
元素的数组,其中
2
元素被初始化为
null

这类似于初始化某个引用类型的数组:

Object[] arr = new Object[2];
这将为您提供一个包含两个
对象
元素的数组,其中
2
元素初始化为
null


新的int[2][3]实例化实际上是一个特例,因为它实例化了外部数组(一个有2个元素)和内部数组(每个有3个元素),这两个数组都是外部数组的元素。

您可以在末尾加上花括号
{}
。这是有效的,没有行和列的空二维数组:

int[][]arr=newint[][]{};

另见: