为什么java允许私有字符串[][]var[]

为什么java允许私有字符串[][]var[],java,arrays,variables,Java,Arrays,Variables,这段代码可以编译。但是他们不应该在类型或变量上创建数组吗?代码如下: private String[][] var[] 所有这些形式都是等效的: private String[][][] var; private String[][][] var; private String[][] var[]; private String[] var[][]; private String var[][][]; 它们的意思都是一样的:三维字符串数组。stringvar[][]语法可能看起来有点奇怪,

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

代码如下:

private String[][] var[]
所有这些形式都是等效的:

private String[][][] var;
private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];
它们的意思都是一样的:三维字符串数组。
stringvar[][]
语法可能看起来有点奇怪,但它让C/C++程序员在Java中感觉像是在家一样(这就是通常在C/C++中声明数组类型的方式)

在Java中,首选
String[][]]var
语法,因为它清楚地表明
var
的类型是
String[][][]
,在其他语法及其不同变体中,类型信息在变量之前和之后被分割-尽管从编译器的角度来看这是完全合法的,但更难阅读

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

private String[][][] var;
private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];

代码与此相同:

private String[][] var[]
所有这些形式都是等效的:

private String[][][] var;
private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];
它们的意思都是一样的:三维字符串数组。
stringvar[][]
语法可能看起来有点奇怪,但它让C/C++程序员在Java中感觉像是在家一样(这就是通常在C/C++中声明数组类型的方式)

在Java中,首选
String[][]]var
语法,因为它清楚地表明
var
的类型是
String[][][]
,在其他语法及其不同变体中,类型信息在变量之前和之后被分割-尽管从编译器的角度来看这是完全合法的,但更难阅读

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

private String[][][] var;
private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];

奥斯卡的回答很好。如果你读英文的
String[][]var[]
,你会说“var是一个二维字符串数组”,因此“var是一个三维字符串数组”

奥斯卡的答案很好。如果你读英文的
String[][]var[]
,你会说“var是一个二维字符串数组”,因此“var是一个三维字符串数组”

声明符中允许使用括号,这是对C语言传统的一种认可 和C++。变量声明的一般规则,但是,允许 括号同时出现在类型和声明符中,以便 局部变量声明“

在。在我看来,“类型”中的方括号(
[]
)比声明变量中的方括号更有意义。但是为了确认C/C++的传统,它是按照JLS中的文本所说的那样做的。另一件事是,将方括号与类型和变量混合使用会使读者/程序员感到困惑

声明符中允许使用括号,这是对C语言传统的一种认可 和C++。变量声明的一般规则,但是,允许 括号同时出现在类型和声明符中,以便 局部变量声明“


在。在我看来,“类型”中的方括号(
[]
)比声明变量中的方括号更有意义。但是为了确认C/C++的传统,它是按照JLS中的文本所说的那样做的。另一件事是,将方括号与类型和变量混合使用会使读者/程序员感到困惑

这是一个示例,它向您展示了
[]
位置的不同之处

String[][][] m()  {return null;}
String[][] m() [] {return null;}
String[] m() [][] {return null;}
String m() [][][] {return null;}
arr
String
的数组,而
arr2
String
的数组

如您所见,如果您希望在同一行上声明不同的数组,那么它会很有用

在您的示例中,它可能是在同一行上声明的另一个
var2

String[] arr, arr2[];

这是一个示例,它向您展示了
[]
位置的不同之处

String[][][] m()  {return null;}
String[][] m() [] {return null;}
String[] m() [][] {return null;}
String m() [][][] {return null;}
arr
String
的数组,而
arr2
String
的数组

如您所见,如果您希望在同一行上声明不同的数组,那么它会很有用

在您的示例中,它可能是在同一行上声明的另一个
var2

String[] arr, arr2[];
根据关于
阵列
一节中的说明:

[]
可能作为类型的一部分出现在声明的开头,或者作为特定变量的声明符的一部分出现,或者两者都出现

例如:

字节[]行向量、列向量、矩阵[]
本声明相当于:

字节行向量[]、列向量[]、矩阵[]

(强调矿山)

请特别注意最后一个例子,它说
字节[]矩阵[]
相当于
字节矩阵[][]

所以不,这不是一个bug,只是一个设计选择

根据关于
阵列
一节中的说明:

[]
可能作为类型的一部分出现在声明的开头,或者作为特定变量的声明符的一部分出现,或者两者都出现

例如:

字节[]行向量、列向量、矩阵[]
本声明相当于:

字节行向量[]、列向量[]、矩阵[]

(强调矿山)

请特别注意最后一个例子,它说
字节[]矩阵[]
相当于
字节矩阵[][]


所以不,这不是一个bug,只是一个设计选择

java有一个奇怪的地方,但是变量名上的数组括号是允许的。出于某种原因,我只看到Oracle教程一开始就提到它可以工作,以后再也不用它了。我猜这里的拆分会使它成为一个3d数组?这对于java来说很奇怪,但是变量名上的数组括号是允许的。出于某种原因,我只看到Oracle教程一开始就提到它可以工作,以后再也不用它了。我猜这个分割会使它成为一个3d阵列?谢谢!很有意思的是