问题描述
int length = 1000000000;
Integer sum1 = 0;
for (Integer i = 0; i < length; i++) {
sum1 = sum1 + 1;
}
System.out.println(sum1);
拳击:
-
i++
盒i + 1
到Integer
-
sum1 + 1
被装箱为整数
开箱:
-
i < length
将i
拆箱到int
我上面的说法正确吗?以及如何以编程方式计算装箱和拆箱操作的数量?
解决方法
如果 sum1 总是加 1 并且在程序开始时总是零,那么 sum1 实际上是用 sum1 执行的装箱操作的次数。 sum1 上的操作更短:
--> sum1=sum1+1;-->sum1+=1-->sum1++;
所以如果sum1是用sum1执行的装箱操作的次数,那么我们可以假设用i++对i 实际上是 i。 For 循环总是检查条件
i
,所以我们知道它会检查这个长度次。您可能认为它会迭代 lenth-1 次,但实际上它会检查并保持最后,而不是完整的条件。
所以我们可以得出结论:
number_unboxed_operations=长度, number_boxed_operations=i+sum1.
如果 sum1 上的操作确实不同(sum1+=2),我们可以问问自己条件成立的时间。
条件为真直到 i==length 所以对于 sum1 操作将被执行 lenth-1 次;