2012-09-21 38 views
3
private String[][] var[] 

此代码编译。但是,他们不应该在类型或变量上创建数组吗?为什么java允许私有字符串[] [] var []

+1

关于Java一件奇怪的事,但在变量名数组括号是允许的。出于某种原因,我只看到Oracle教程中提到它在一开始就工作,从来没有使用过它。我猜这个分裂使它成为一个3d数组? –

回答

8

的代码是一样的:

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语法是优选的,因为它清楚地表明了类型的varString[][][],在其它语法和其不同的变化的类型的信息之前和可变后分裂 - 尽管它是完全合法从编译器的角度来看,阅读起来很难。

即使怪异,所有这些方法声明是合法的,等价的:

String[][][] m() {return null;} 
String[][] m() [] {return null;} 
String[] m() [][] {return null;} 
String m() [][][] {return null;} 
1

奥斯卡的答案是相当不错的。如果一个人在英语阅读String[][] var[],一会说“变种是二维字符串数组的数组”,从而“变种是一个三维的String数组”

3

The Java Language Specification

“括号在说明符允许作为点头下向C 和C的传统++。一般规则变量声明,但是,允许 括号出现在两者的类型和在说明符,从而使 局部变量声明”

JLS 10.2。在我看来,“类型”中的方括号([])比声明变量更有意义。但为了证实C/C++的传统,它是按照JLS中的文本所述完成的。另一件事是,将方括号与类型和变量混合在一起会让读者/程序员感到困惑。

1

这是一个示例,它显示[]位置有何不同。

String[] arr, arr2[]; 

arrString阵列而arr2String数组的数组。

如果您想要在同一行上声明不同的数组,您可以看到它的优点。

而且在你的例子也有可能是另一个var2在同一行中声明:

private String[][] var[], var2; 
相关问题