【发布时间】:2012-02-27 14:56:35
【问题描述】:
我错误地声明了一个字符串数组,如下:
String[] tokens[];
Eclipse 不会将此作为错误突出显示,而是认为它等同于:
String[][] tokens;
这是正确的行为还是错误?
【问题讨论】:
我错误地声明了一个字符串数组,如下:
String[] tokens[];
Eclipse 不会将此作为错误突出显示,而是认为它等同于:
String[][] tokens;
这是正确的行为还是错误?
【问题讨论】:
这是正确的行为 - 可以在对象类型 或 变量名称之后使用括号定义数组。
String[] tokens;
和
String tokens[];
都是一样的。然而,编写二维数组是一种令人困惑的方式,所以我不会故意使用它;)
如果您将数组视为对象(从技术上讲,它们是),而方括号则视为 new 关键字和空构造函数的语法糖,您可以将“错误”设想为:
tokens = new Array<String>(new Array<String>());
两者兼而有之
String[] tokens;
和
String tokens[];
两者都相当于
new Array<String>();
【讨论】:
是的,这是正确的行为。这些是等价的:
String[] tokens[];
String tokens[][];
String[][] tokens;
为了清楚起见,您应该在变量类型上声明“[]”,而不是在它的名称上,但除此之外没关系。
【讨论】:
这是一个有效的声明。您也可以将其声明为String tokens[][];
【讨论】:
信任 Eclipse。以下都是等价的:
String tokens[][];
String[] tokens[];
String [][]tokens;
【讨论】:
根据the Java tutorial,您可以(但通常不应该)在变量名后用方括号声明数组:
您也可以在数组名称之后放置方括号:
// 不鼓励这种形式 float anArrayOfFloats[];但是,惯例不鼓励这种形式;括号标识 数组类型,并应与类型名称一起出现。
鉴于这一点和您的观察,可以肯定地说 Eclipse 允许您混合这些形式的声明,在您的情况下,这会产生一个数组数组。
【讨论】:
这是对 C/C++ 等旧语言的回忆。
实际上,关于 Java 中类型检查和 JVM 的工作方式的声明
String[][] tokens;
更加连贯。
这是因为您使用“String 对象的二维数组”类型声明 tokens,因此可以将 String[][] 视为单一类型声明。
【讨论】: