为什么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阵列?谢谢!很有意思的是