Java 数组长度未按预期工作

Java 数组长度未按预期工作,java,arrays,Java,Arrays,上面的程序似乎应该打印3 2。相反,它打印2 1。看来[0]指的是第二维度,而不是第一维度。为什么?我如何引用第一维度 i[0][0][0]。长度根本不起作用,但无法取消对int的引用。我在这里遗漏了什么?第一维度是我。让我们把它分开: public static void main(String[] args) { int i[][][] = new int[3][2][1]; System.out.println(i[0].length + " " + i[0][0].len

上面的程序似乎应该打印3 2。相反,它打印2 1。看来[0]指的是第二维度,而不是第一维度。为什么?我如何引用第一维度

i[0][0][0]。长度根本不起作用,但无法取消对int的引用。我在这里遗漏了什么?

第一维度是我。让我们把它分开:

public static void main(String[] args) {
    int i[][][] = new int[3][2][1];
    System.out.println(i[0].length + " " + i[0][0].length);
}
您在评论中说anArray[0]是第一个元素。这是对的。三维数组的第一个元素是二维数组,在本例中,其长度为2

如果你用另一种方式写的话,它可能会变得更清晰,因为你的方式被认为有点不合常规:

int i[][][] = new int[3][2][1];
int j[][] = i[0]
int k[] = j[0] // or i[0][0]
int l = k[0] // or j[0][0] or i[0][0][0]
// the following prints 3 2 1
System.out.println(i.length + " " + i[0].length + " " + i[0][0].length);
这表明我指向一个三维int数组。如果你想知道这个数组的长度,或者更好地说,它是第一维,你必须通过i来获得它。

i是三维数组,所以i.length给出了第一个大小

i[0]是二维数组中的第一个数组,因此i[0]。length给出了第二个大小

i[0][0]是一维数组中的第一个,因此i[0][0]。length给出了第三个大小


i[0][0][0]是一个int,因此不能对其进行.length运算。

这在Java中有点不自然

凭直觉,我会这样解释:

int[][][] i = new int[3][2][1];
作为:

new int[x][y][z]
但事实并非如此。这是奇怪的部分。它实际上是:

new ((int[x])[y])[z] // (Array of int[][]) with length z

这意味着这是一个长度为x的数组。数组包含所有大小为y的数组,这些数组包含所有大小为z的数组。

System.out.printlni.length++i[0].length;。。。我从不看数组的初始化器,而是看它们的用法,即I[0][1][2]。这比i[2][1][0]更直观,因此数组的初始化如下。哦,顺便说一句:你的帖子没有回答这个问题;我知道,这就是他们这么做的原因。但是再想想:newint[5][2]和newobject[5]之间的区别是什么?在第二种情况下,对象部分是数组的类型。在第一种情况下,数组的类型实际上是:int[2],这有点混乱,对吗?
new int[x]([y]([z])) // (Array of int[][]) with length x