Java中这两个语句有什么区别?

What is the difference between these two statements in Java?

int[] X = {1,2,3}; 
int[] Y = new int[] {1,2,3}

数组X的内容也会存储在堆上吗?

这两个语句在技术上语法上不同,但效果相同。

array initializer 可以作为局部变量声明初始值设定项的一部分出现,如:

int[] X = {1,2,3};

还有一个数组创建表达式,如:

new int[] {1,2,3}

是的,X 将在堆上。 Java 中的所有对象都在堆上,并且由于数组是对象,所以所有数组都在堆上。

唯一的区别是第一个语句只有在声明数组变量时才起作用,而第二个语句可以与声明分开写:

int[] X;
int[] Y;
X = {1,2,3}; // doesn't work
Y = new int[] {1,2,3}; // works

Java 提供了初始化数组的便利。因此,如果没有 new 运算符,您可以直接分配值。喜欢

 int[] X={1,2,3};

此处数组的大小由初始化块中的 no.of 个元素知道。

另一种初始化方式是使用 new 运算符。

int[] y=new int[]{1,2,3};

字符串变量也采用了这两种初始化方式。但是在字符串中这两种类型有不同的含义。