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

fas*_*ava 3 java arrays variables

private String[][] var[]
Run Code Online (Sandbox Code Playgroud)

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

Ósc*_*pez 8

代码与此相同:

private String[][][] var;
Run Code Online (Sandbox Code Playgroud)

所有这些形式都是等同的:

private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];
Run Code Online (Sandbox Code Playgroud)

它们都是相同的:一个三维的字符串数组.该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;}
Run Code Online (Sandbox Code Playgroud)


GBl*_*ett 7

根据JLS 10.2中关于的部分Array

[]可能显示为在声明的开头所述类型的部分,或作为说明符用于特定变量的一部分,或两者

例如:

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

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

(强调我的)

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

所以不,这不是错误,只是设计选择。