Java溢出问题

dam*_*ned 3 java

我写了下面的代码,当我有打印语句而没有它时,它的答案不同.

class test
{
    public static void main(String args[])
    {
      int i = Integer.MAX_VALUE;
      int j = Integer.MAX_VALUE-100;
      int count = 0;
      for(; j<=i; j++){
        count++;
        //System.out.println(j); // If we remove comment, answer is different
      }
     System.out.println(count + ", " + j + ", " + (j<=i));        
    }
}
Run Code Online (Sandbox Code Playgroud)

没有印刷声明的答案是:

101, -2147483648, true
Run Code Online (Sandbox Code Playgroud)

并使用print语句:

15588, -2147468161, true
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,最终条件都应该返回false,但它会返回true.任何人都可以解释一下.

ass*_*ias 6

j <= Integer.MAX_VALUE根据定义,它总是如此.在这两种情况下,你的循环永远不会结束

如果将其更改为j < i,则循环将终止,并且无论print语句如何,都将返回相同的答案.

编辑

使用Netbeans/Oracle JDK 7u9测试代码时,循环永远不会按预期结束.然而,有些人报告说他们看到了问题中描述的相同行为.@auselen指向这个类似的帖子,它指的是一个bug.

  • @DuncanJones是的,在这种情况下,它输出`100,2147483647,true`,有或没有print语句. (3认同)
  • @gefei没有它没有.至少没有问题中的代码. (3认同)