6
据我所知,这代码:我应该在内联初始化数组中使用`new`吗?
int[] numbers = new int[] { 1, 2 };
是一样的验证码
int[] numbers = { 1, 2 };
事实上,编译.class
拆卸相同的代码:
1: newarray int
3: dup
4: iconst_0
5: iconst_1
6: iastore
7: dup
8: iconst_1
9: iconst_2
10: iastore
11: astore_1
12: iconst_2
但是,类似的代码并不总是以相同的方式执行,甚至编译。例如,考虑:
for (int i : new int[] { 1, 2 }) {
System.out.print(i + " ");
}
此代码(在主要方法中)编译和打印1 2
。然而,在除去new int[]
做出如下:
for (int i : { 1, 2 }) {
System.out.print(i + " ");
}
生成多个编译时错误,与
Test.java:3: error: illegal start of expression
for (int i : {1, 2}) {
^
开始我假设这两个例子之间的差别在于,在第一个例子中(与int[] numbers
),类型int
明确规定。但是,如果是这种情况,为什么Java不能推断出i
类型的表达式的类型?
更重要的是,还有其他两种语法不同的情况,或者哪一种比另一种更好?
@LuiggiMendoza感谢您的有用的链接。但是,我不确定它是否完全回答了这个问题:即是否存在其他语法不同的情况? – wchargin
检查所有答案,而不仅仅是最上面的答案。 –
我假设你指的是erickson的[this one](http://stackoverflow.com/a/16697404/732016)。这个答案确实解释了它的方法,但不适用于'for'循环,其中类型明确说明并且没有循环风险。 – wchargin