此代码中是否发生装箱/拆箱?

时间:2019-03-07 09:23:40

标签: java boxing autoboxing

给出以下代码,在这种情况下Java编译器会进行装箱/拆箱吗?

public static Integer sum(Iterable<Integer> numbers){
    Integer sum = 0;
    for(Integer n : numbers){
        sum += n;
    }

    return sum;
}

2 个答案:

答案 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。