关于java:构建数组时新建与否的区别

the difference between with new or without when build array

我知道有两种方法可以构建一个数组:

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

到现在一切都好。

但是当使用for循环来处理数组的数据时。 出现了一些东西。

至于这种方式:

1
for(int data:a){}

一切都好,
但是关于以下方式,出现了惊喜:

1
for(int data:{1,2,3}){}

它无法通过编译。 和错误信息是:

此行有多个标记
- 语法错误,插入"}"以完成ArrayInitializer
- 语法错误,插入";;)语句"以完成ForStatement
- 类型不匹配:无法从int []转换为int
- 令牌":"上的语法错误,=预期

我想找出原因,而且我想知道当没有new关键字时数组是在堆栈还是堆内存中? 并且我知道当使用新关键字时它存在堆内存。


在变量初始化中,两种形式具有完全相同的结果。

简短形式(称为数组初始化程序;JLS§10.6)只能用于初始化,而不是作为独立值,这就是for示例不起作用的原因。