Java 溢出问题

标签 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));        
    }
}

没有打印语句的答案是:

101, -2147483648, true

打印语句是:

15588, -2147468161, true

在这两种情况下,最终条件都应返回 false,但它返回 true。谁能解释一下。

最佳答案

j <= Integer.MAX_VALUE根据定义始终为真。在这两种情况下,您的循环永远不会结束。

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

编辑

使用 Netbeans/Oracle JDK 7u9 测试代码时,循环永远不会按预期结束。然而,一些人报告说他们看到了与问题中描述的相同的行为。 @auselen 指向 this similar post这是指一个错误。

关于Java 溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307960/

相关文章:

java - FSET服务。无法实现web服务,soap客户端

java.sql.Time 异常

java - 如何从 edittext 的第二行开始输入?

java - android 日期比较

java - Maven 仍然可以成功构建并出现已知错误

java - 使用泛型实例化java数组

java - 实体中的 JPA 外键

java - 如何使用 xpath 从特定站点获取值并将其存储在数组中? (安卓)

java - 改变 Activity 方向的填充

java - DirectRunner 不按照我在 Beam Java SDK 中使用 FixWindows 指定的方式从 Pub/Sub 读取数据