提问人:Fabrício Matté 提问时间:3/3/2013 更新时间:3/3/2013 访问量:28112
使用值初始化数组 - 我是否应该显式实例化类?
Initializing array with values - should I explicitly instance the class or not?
问:
我经常看到数组是这样初始化的:
String[] array = new String[] { "foo", "bar", "baz" };
但是阅读语言基础 - 数组表明,短语法不需要显式实例化构造函数:
或者,您可以使用快捷方式语法来创建和 初始化数组:
int[] anArray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
因此,假设这两种初始化方法:
String[] array = new String[] { "foo", "bar", "baz" };
String[] array2 = { "foo", "bar", "baz" };
这之间有什么区别吗?两者似乎都是一样的,在这种情况下,我应该假设第二个隐式调用,而第一个只是一种更冗长的方式,还是在幕后还有更多?new String[]
从 Java 开始,如果这是一个太愚蠢的问题,那么很抱歉,但我在网络上找不到任何关于此的内容。
答:
21赞
NPE
3/3/2013
#1
这两种方法是等效的。但请注意,简洁语法只能在变量声明中使用。外部变量声明必须使用详细语法:
String[] array;
array = new String[] { "foo", "bar", "baz" }; // OK
String[] array2;
array2 = { "foo", "bar", "baz" }; // ERROR
有关进一步讨论,请参阅此答案。
7赞
Matt Ball
3/3/2013
#2
这之间有什么区别吗?
最终结果没有区别。但是,根据 JLS § 10.6,您不能在每个上下文中使用数组初始值设定项 synax。
可以在声明 (§8.3、§9.3、§14.4) 中指定数组初始值设定项,也可以作为数组创建表达式 (§15.10) 的一部分指定,以创建数组并提供一些初始值。
评论
1赞
Fabrício Matté
3/3/2013
我确实喜欢规范链接,非常感谢。但我相信 NPE 的答案对于未来可能会阅读这个问题的 Java 初学者来说更清晰/更简单。无论如何,两者都+1。=]
0赞
irreputable
3/3/2013
#3
由于数组是可变的,因此每个数组都是一个新实例是有道理的
String[] array1 = { "foo", "bar", "baz" };
String[] array2 = { "foo", "bar", "baz" };
即修改不会影响 .array1
array2
评论
1赞
Fabrício Matté
3/3/2013
我有一个体面的 OO 基础,并且了解每个数组都是一个新实例,具体问题是在数组的初始化中是否有任何区别。new String[]
评论