为什么java允许私有String [] [] var []

时间:2012-09-21 03:45:09

标签: java arrays variables

private String[][] var[]

此代码编译。但是他们不应该在类型或变量上创建数组吗?

5 个答案:

答案 0 :(得分: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语法是首选,因为它清楚地表明var类型String[][][],在其他语法中是不同的变量类型信息在变量之前和之后被拆分 - 尽管从编译器的角度来看它是完全合法的,但它更难以阅读。

即使更奇怪,所有这些方法声明都是合法且等效的:

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

答案 1 :(得分:7)

根据有关Array的部分中的JLS 10.2

  

[]可以在声明的开头显示为类型的一部分,也可以作为特定变量(或两者)的声明符的一部分。

     

例如:

     

byte[] rowvector, colvector, matrix[];   该声明等效于:

     

byte rowvector[], colvector[], matrix[][];

(强调我的)

请特别注意最后一个示例,其中说byte[] matrix[]等效于byte matrix[][]

所以不,这不是bug,仅仅是设计选择。

答案 2 :(得分:3)

The Java Language Specification

  

“作为对C传统的点头,允许在声明者中使用括号   和C ++。但是,变量声明的一般规则允许   括号出现在类型和声明符中,以便   局部变量声明“

JLS 10.2中的

。在我看来,“类型”中的方括号([])比声明的变量更能理解数组。但是为了确认C / C ++的传统,它是按照JLS中的文本所做的那样完成的。另一件事是,将方括号与两种类型和变量混合在一起会让读者/程序员感到困惑。

答案 3 :(得分:1)

奥斯卡的答案非常好。如果要用英语阅读String[][] var[],可以说" var是一个二维字符串数组的数组"因此" var是一个三维字符串数组"

答案 4 :(得分:1)

这是一个示例,显示[]位置何时发挥作用。

String[] arr, arr2[];

arrString的数组,而arr2String的数组数组。

如果你想在同一行上声明不同的数组,你可以看到它是有益的。

在你的例子中,它可能是在同一行声明的另一个var2

private String[][] var[], var2;