[英]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.