private String[][] var[]
此代码编译。但是他们不应该在类型或变量上创建数组吗?
代码与此相同:
private String[][][] var;
所有这些形式都是等价的:
private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];
它们的意思都是一样的:一个字符串的三维数组。String var[][][]
语法可能看起来有点奇怪,但这就像让 C/C++ 程序员在 Java 中感到宾至如归(这就是您通常在 C/C++ 中声明数组类型的方式)。
在 Java 中,String[][][] var
语法是首选的,因为它清楚地表明了is的类型,在其他语法及其不同的变体中,类型信息在变量之前和之后被分割——尽管从编译器的角度来看它是完全合法的,但很难读。var
String[][][]
更奇怪的是,所有这些方法声明都是合法且等价的:
String[][][] m() {return null;}
String[][] m() [] {return null;}
String[] m() [][] {return null;}
String m() [][][] {return null;}
根据JLS 10.2关于Array
's 的部分:
可以作为类型的
[]
一部分出现在声明的开头,或者作为特定变量的声明符的一部分,或者两者兼而有之。例如:
byte[] rowvector, colvector, matrix[];
这个声明等价于:
byte rowvector[], colvector[], matrix[][];
(强调我的)
特别注意最后一个例子,它说byte[] matrix[]
相当于byte matrix[][]
.
所以不,这不是一个错误,只是一个设计选择。
奥斯卡的回答很好。如果String[][] var[]
用英文阅读,会说“var 是二维字符串数组的数组”,因此“var 是三维字符串数组”
这是一个向您展示[]
位置何时产生影响的示例。
String[] arr, arr2[];
是的arr
数组,String
而arr2
是 的数组的数组String
。
如果您想在同一行上声明不同的数组,这可能是有益的。
在您的示例中,它可能是var2
在同一行上声明的另一个:
private String[][] var[], var2;