我知道存在两种构建数组的方法:
int[] a = {1,2,3};
int[] b = new int[]{1,2,3};
现在一切正常。
使用 for loop 处理 array 的数据时但。出现了一些东西。
就这样:
for(int data:a){}
一切都很好,
但是关于以下方式,出现了惊喜:
for(int data:{1,2,3}){}
它无法通过编译。并且错误信息是:
此行的多个标记
- 语法错误,插入“}”以完成ArrayInitializer
- 语法错误,插入“;;”语句“完成ForStatement
- 类型不匹配:无法从int []转换为int
- 令牌“:”上的语法错误,=预期
我想找出原因,而且我想知道数组是否在堆栈或堆内存中,而不是新关键字?使用 new 关键字时,我知道它存在堆内存。
答案 0 :(得分:6)
在变量初始化中,两种形式具有完全相同的结果。
简短形式(称为数组初始值设定项; JLS§10.6)只能用于初始化,而不是作为一个独立的值,这就是为什么你的for
例子不起作用。