对于循环
int r = 10;
for(int h=0;h<r;h--)
{
r--;
}
out.print(r);
输出为 -2147483639。我不确定为什么循环不会无限重复,而且我无法完全弄清楚输出数字的重要性(除了它接近 int MIN_VALUE 的事实(。到底发生了什么?
r,h
开始10,0
,然后每次迭代都倒计时 1,例如 9,-1
、8,-2
等等。
最终,h
达到Integer.MIN_VALUE
,即 r=-2147483638, h=-2147483648
,在它下溢int
并变得r=-2147483639, h=2147483647
之前,此时h<r
变得false
,循环结束。
结果:-2147483639
注意:如果您将int
更改为long
,仍然会发生下溢,只是需要更长的时间。
除了溢出,还有算术下溢。在您的情况下,h
的值在r
之前下溢(此时,它是Integer.MAX_VALUE
(,因此h
大于 r
并且循环结束。
int r = Integer.MIN_VALUE;
System.out.println(r);
r--;
System.out.println(r);
输出为
-2147483648
2147483647