与 T
是一种类型,可以是基元或类,是 T
的数组是 T[]
。变量声明为 T[] a;
并构造为 new T[n]
。与T t
然后你可以做a[i]=t
或t=a[i]
.
我的问题是 T
是int[]
。与int[][] a
a[i]
指 int[]
之一a
内的数组和a[i][j]
到同一个 int[]
中的元素数组,所以这个类比在这里很好。
但是构建 a
按照上面的类比,应该是 a = new int[][n];
(将 T
替换为 int[]
,目前不担心 a[i]
未定义或 null
,我可以稍后分配/构造它们)。
但是,这会产生以下错误:
Cannot specify an array dimension after an empty dimension
但是new int[n][]
不会产生错误。
此外a = new int[m][n];
没问题,而且很明显它构造了数组 a
,以及它的每个元素,它们都是具有相同长度的数组。但依此类推,a
的长度应该是n
以及每个 a[i]
的长度应该是m
。但上一段让我怀疑情况恰恰相反,所以我尝试了 int[][] a = new int[3][7];
并显示a.length
和a[0].length
,这证实了我的怀疑。
那么当你构造一个数组数组时,为什么长度必须以相反的顺序给出?这是否取决于 Java 实现,或者这个错误的顺序是否具有普遍性?
我查过http://www.javaworld.com/article/2077367/learn-java/array-of-arrays.html但它并没有澄清这一点;它还包含错误( String [][] saa = { { { "Help" } } };
)。
最佳答案
来自 java language specification
An array type is written as the name of an element type followed by some number of empty pairs of square brackets []. The number of bracket pairs indicates the depth of array nesting.
由于您是从左到右阅读的,因此您应该将最左边的一对括号视为嵌套的顶层。
这意味着 int[m][n]
是嵌套在 m
长度数组中的 n
长度整数数组,而不是相反。
关于java - 在Java中构造数组的数组,维数顺序错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26860190/