繁体   English   中英

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

[英]Does occur any boxing/unboxing in this code?

鉴于以下代码,Java 编译器是否在这种情况下应用任何装箱/拆箱?

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

    return sum;
}

这里 int 0 被自动装箱为一个整数总和:

Integer sum = 0;

这里的值被取消装箱,因为一元加运算符仅适用于 int:

sum += n;

在这里迭代整数时不会发生拆箱:

for(Integer n : numbers)

如果您这样做(例如),可能会在 for 循环中取消装箱:

for(int n : numbers)

有关非常相似的示例和解释,请参阅自动装箱和拆箱

是的,在使用+运算符执行加法时, Integer对象被转换为int文字。 看看这个链接 它说如下:

因为余数 (%) 和一元加号 (+=) 运算符不适用于 Integer 对象,您可能想知道为什么 Java 编译器编译该方法而不发出任何错误。 编译器不会生成错误,因为它会在运行时调用 intValue 方法将 Integer 转换为 int。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM