给出以下代码,在这种情况下Java编译器会进行装箱/拆箱吗?
public static Integer sum(Iterable<Integer> numbers){
Integer sum = 0;
for(Integer n : numbers){
sum += n;
}
return sum;
}
答案 0 :(得分:1)
这里将int 0自动装箱为Integer sum:
Integer sum = 0;
此处的值被取消装箱,因为一元加号运算符仅适用于int:
sum += n;
在遍历Integer时,这里没有拆箱操作:
for(Integer n : numbers)
如果您这样做(例如),可能会在for循环中取消装箱:
for(int n : numbers)
有关非常相似的示例和说明,请参见Autoboxing and Unboxing。
答案 1 :(得分:1)
是的,在使用Integer
运算符执行加法运算时,int
对象被转换为+
文字。看看这个link。它显示以下内容:
因为余数(%)和一元加(+ =)运算符不适用 到整数对象,您可能想知道为什么Java编译器会编译 方法,不会发出任何错误。编译器不会生成 错误,因为它调用intValue方法将Integer转换为 运行时为int。