java - 与 Integer.MAX_VALUE 比较并使用 System.out.println 时,for 循环提前终止

标签 java for-loop int max

当我运行这个类时,for 循环似乎提前终止

class Test {

    public static void main(String[] args) {
        int result = 0;
        int end = Integer.MAX_VALUE;
        int i;
        for (i = 1; i <= end; i += 2) {
            System.out.println(i);
        }
        System.out.println("End:" + i);
    }

}

输出是:

1
3
5
...
31173
31175
End:31177

为什么到此为止?有趣的是,如果我在 for 循环中删除 System.out.println(i),输出将是 End:-2147483647。显然 i 中的值有 wrapped round

我使用的Java版本是

Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

最佳答案

这是 Java 6 中的一个已知错误。JIT 错误地优化了循环。我相信较新版本的 Java 没有此错误。

http://vanillajava.blogspot.co.uk/2011/05/when-jit-gets-it-wrong.html

Java 6 update 16 刚刚推出两年多。如果您无法更新到 Java 7,我建议您更新到最新版本的 Java 6 update 25。

顺便说一句,Java 6 将在几个月后结束免费支持(2012 年 12 月)

关于java - 与 Integer.MAX_VALUE 比较并使用 System.out.println 时,for 循环提前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12793248/

相关文章:

java - 为什么不鼓励使用不可变的 null ?

python - 如何将 C++ for 循环转换为 Python?

java - 使用分隔符和hasNext在java中获取int用户输入?

java - 有符号整数到无符号字节,反之亦然

json - Swift 4 可编码 : the keys are Int array in JSON data

java - 使用@Inject Instance获取实现特定接口(interface)的EJB和CDI bean

java - Eclipse for Java Swing 中的结果不一致

java - 如何使用 java curl URL 并将输出保存到文件

php - 基于PHP for循环的带有变量的MYSQL SELECT语句

windows - 批处理 - 内部 For 循环 token 参数不接受外部 For 循环内的延迟扩展变量