使用括号列表时如何创建数组对象

Pie*_*rtz 3 java

我理解当我使用关键字调用其构造函数时array,Java会创建一个对象new:

int[] myIntArray = new int[3];
Run Code Online (Sandbox Code Playgroud)

但如果我反而写

int[] myIntArray = {1,2,3};
Run Code Online (Sandbox Code Playgroud)

一个array对象被创建,但我还没有调用它的构造函数new.这是如何工作的 - 如何在不调用构造函数的情况下用Java创建对象?

Boh*_*ian 6

就创建数组对象而言,它是语法糖.编译时,它的工作方式与标准语法完全相同.

不同之处在于,对于第一个版本,您没有填充数组 - 所有元素都是默认值int,即零.

在第二个版本中,您正在创建填充数组.


rge*_*man 5

这部分:

{1,2,3}
Run Code Online (Sandbox Code Playgroud)

是一个数组初始值设定项,可以用作声明的一部分.引用JLS,第10.6节:

可以在声明(第8.3节,第9.3节,第14.4节)中指定数组初始值设定项,或者作为数组创建表达式(第15.10节)的一部分,以创建数组并提供一些初始值.

ArrayInitializer:{VariableInitializersopt,opt}