使用值初始化数组 - 我应该显式实例化该类吗?

Fab*_*tté 17 java

我经常看到数组被初始化如下:

String[] array = new String[] { "foo", "bar", "baz" };
Run Code Online (Sandbox Code Playgroud)

但阅读语言基础 - 数组表明,短语法不需要显式实例化构造函数:

或者,您可以使用快捷语法来创建和初始化数组:

 int[] anArray = { 
     100, 200, 300,
     400, 500, 600, 
     700, 800, 900, 1000
 };
Run Code Online (Sandbox Code Playgroud)

所以,假设这两种初始化方法:

String[] array = new String[] { "foo", "bar", "baz" };
String[] array2 = { "foo", "bar", "baz" };
Run Code Online (Sandbox Code Playgroud)

这些之间有什么区别吗?双方似乎工作一样,在这种情况下我应该承担的第二个隐式调用的new String[],第一个就是一个更详细的方式,还是有更多的它在幕后?

从Java开始很抱歉,如果这对于一个问题太愚蠢了,但我在网上找不到任何相关信息.

NPE*_*NPE 19

这两种方法是等价的.但请注意,简洁语法只能用于变量声明.在外部变量声明之外,您必须使用详细语法:

    String[] array;
    array = new String[] { "foo", "bar", "baz" }; // OK

    String[] array2;
    array2 = { "foo", "bar", "baz" };             // ERROR
Run Code Online (Sandbox Code Playgroud)

有关进一步的讨论,请参阅此答案.


Mat*_*all 7

这些之间有什么区别吗?

最终结果没有区别.但是,根据JLS§10.6,您无法在每个上下文中使用数组初始化程序synax.

数组初始化可在声明(指定§8.3,第9.3节,§14.4),或作为阵列创建表达式(的一部分§15.10),以建立一个数组,并提供一些初始值.