据我了解,java中的二维数组是数组的数组。类似于通常的数组符号,我希望这意味着
int[][]
实际上是
(int[])[]
(一个 int 数组的数组)。因此我希望数组的长度
int[][] array = new int[2][3]; // (int[2])[3]
为 3(因为它将是长度为 3 的数组的长度为 2 的数组)。然而,情况似乎正好相反。
我试图为此找到解释,但无法找到。我发现很多帖子解释了如何初始化多维数组,并且它们是数组的数组,但我找不到任何关于索引顺序为何以这种方式工作的解释。
我唯一的理论是,人们发现先迭代左索引更自然,而 Java 的构建方式使得此操作更有效,因此开发人员非常慎重地做出了这个选择。
我很感谢任何确认这种解释的消息来源或任何其他原因。
编辑:由于对于为什么有人会相信以相反的方式使用索引是一个好主意似乎有些困惑,这里有一些澄清:
对于一个类型T,表达式new T[5]通常产生一个大小为 5 的数组。该类型int[]似乎是一个非常好的类型,但是 Java 不允许我说new (int[])[5],而是强制我使用new int[5][]. 我一直在寻找 Java 对我这样做的原因(并得到了一个)。
对于像我这样思考的人的(非常好的)答案,我想补充的另一件事是:在一个没有人考虑过二维数组的世界中,您可以int[]像创建任何类型的数组一样创建类型的数组其他数组,以下可能是完全合法的代码。
int[][] = new (int[])[5];
int[] firstArray = new int[3];
int[0] = firstArray;
int[0][2] = 1; // last element of first array
int[0][4] = 2; // IndexOutOfBoundsException, trying to access 5th element of firstArray
这当然会完全令人困惑,所以我很高兴多维数组得到了特殊处理。
慕桂英4014372
30秒到达战场
守着星空守着你
相关分类