目前我正在阅读《Java Generics and Collections》一书,我发现了一个有趣的代码:
List<Integer> ints = Arrays.asList(1,2,3);
int s = 0;
for (int n : ints) { s += n; }
assert s == 6;
这里 foreach 循环迭代基元:
for (int n : ints) { ... }
但是,Eclipse IDE 建议我迭代装箱类型:
for (Integer n : ints) { ... }
使用一种或另一种迭代方式有什么好处吗?
最佳答案
装箱/拆箱在运行时会产生成本。
- 如果您打算在循环体内对
Integer
进行一次拆箱(就像您所做的那样),那么不会有太大区别。 - 如果在循环体中多次拆箱
Integer
,最好使用for(int i : ints)拆箱一次
- 如果您要在循环体中使用 Integer,那么使用
int
会导致不必要的拆箱/装箱操作。
例如:
List<Integer> subList = new ArrayList<>();
for (Integer i : ints) { //better not to unbox
if (someCondition(i)) subList.add(i);
}
for (int i : ints) { //better to unbox once
int a = i;
int b = 2 * i;
sum += a + b - i;
}
关于java - Java 中按原语或装箱类进行 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897524/