记一则由于整数溢出导致的教科书级的死循环

首先铺垫一下,这段代码的输出是什么?

很多人可能很快就能答出来,正确答案是:-2147483648

那么接下来看这段代码:

乍看之下似乎没啥大毛病,但是结合前面的铺垫,就会发现:

当 i 增长到 Integer.MAX_VALUE  的时候,“奇迹”出现了。接下来,下一个 i 值变为了 -2147483648。跟 total 一比,还是小,于是循环继续。

周而复始,这个循环就永远停不下来了。

当然,这里因为我的简化,还是能比较容易的看出这个死循环的。而实际使用中,这个 total 的取值往往是外部带来的。正常情况下,可能外部取值不会大过 Integer.MAX_VALUE ,也就是 (更多…)