在构建数组时使用new或without之间的区别

nai*_*fei 0 java arrays

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

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

到现在一切都好.

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

至于这种方式:

for(int data:a){}
Run Code Online (Sandbox Code Playgroud)

一切都很好,
但就下面的方式而言,出现了惊喜:

for(int data:{1,2,3}){}
Run Code Online (Sandbox Code Playgroud)

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


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

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

T.J*_*der 6

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

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