我写了一个循环,测试Integer从最小值自加到最大值的执行时间,但中间发现了一个问题,就是加到最大值之后自加恢复到负最大值与手动赋值为负最大值开始下一次循环的时间不同,代码如下:public class TestClass {
public static void main(String[] args) {
int i = Integer.MAX_VALUE;
int count = 0;
long startTime = System.currentTimeMillis();
long tempTime = startTime;
while (true) {
i++;
// if (i % 10000000 == 0) {
// System.out.println(i);
// }
if (i == Integer.MAX_VALUE) {
i = Integer.MIN_VALUE; //手动赋值
count++;
System.out.println("Finish run " + count + " times loop, cost "
+ (System.currentTimeMillis() - tempTime) + " ms.");
tempTime = System.currentTimeMillis();
}
if (count == 10) {
break;
}
}
System.out.println("Total cost " + (System.currentTimeMillis() - startTime) / 1000 + " s.");
}
}效果就是如果手动赋值那里不注释掉,一圈跑下来大概是3s左右,但是把手动赋值去掉,让他自加溢出恢复最小值然后开始第二轮循环的话需要的时间就涨到了7s左右……但我思来想去不明白为什么时间会增加了一倍之久,于是后来为了了解执行路径,我加了一个输出,发现不管是自加自动恢复最小值还是手动赋值最小值都是从最小加到最大,而且由于输出需要时间,加了输出命令后,两者执行时间就都一样了,都是19s左右。到底问题出在哪了?请高手赐教!integer自加
public static void main(String[] args) {
int i = Integer.MAX_VALUE;
int count = 0;
long startTime = System.currentTimeMillis();
long tempTime = startTime;
while (true) {
i++;
// if (i % 10000000 == 0) {
// System.out.println(i);
// }
if (i == Integer.MAX_VALUE) {
i = Integer.MIN_VALUE; //手动赋值
count++;
System.out.println("Finish run " + count + " times loop, cost "
+ (System.currentTimeMillis() - tempTime) + " ms.");
tempTime = System.currentTimeMillis();
}
if (count == 10) {
break;
}
}
System.out.println("Total cost " + (System.currentTimeMillis() - startTime) / 1000 + " s.");
}
}效果就是如果手动赋值那里不注释掉,一圈跑下来大概是3s左右,但是把手动赋值去掉,让他自加溢出恢复最小值然后开始第二轮循环的话需要的时间就涨到了7s左右……但我思来想去不明白为什么时间会增加了一倍之久,于是后来为了了解执行路径,我加了一个输出,发现不管是自加自动恢复最小值还是手动赋值最小值都是从最小加到最大,而且由于输出需要时间,加了输出命令后,两者执行时间就都一样了,都是19s左右。到底问题出在哪了?请高手赐教!integer自加
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货