IT Notes‎ > ‎Java‎ > ‎Java Language‎ > ‎《Java 解惑》笔记‎ > ‎

Puzzle 26: In the Loop

有限循环的无限化


这段代码的运行情况会如何?
        for (int i = Integer.MAX_VALUE - 5; i <= Integer.MAX_VALUE; i++)


运行后,根本停不了。

回避办法很简单:
        int i = Integer.MAX_VALUE - 5;
        do {
        //...
        } while (i++ != Integer.MIN_VALUE);



原因,在Java中:Integer.MAX_VALUE + 1 = Integer.MIN_VALUE,计算如下:
Integer.MAX_VALUE = 0111 1111 1111 1111 1111 1111 1111 1111
                                     +                                                                                 1
Integer.MIN_VALUE = 1000 0000 0000 0000 0000 0000 0000 0000

溢出,溢出,Java语言也不去限制一下,这个……

Java Puzzlers云:当你在使用Integer类型时,要小心它的边值问题。(Whenever you use an integral type be aware of the boundary conditions.)

附:

  1. Puzzle 3: Long Division
  2. 代码在包含在这里
Comments