与 Integer.MAX_VALUE 相比并使用 System.out.println 时 for 循环提前终止

2023-11-24

当我运行这个类时,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

为什么到这里就结束了呢?有趣的是,如果我删除了System.out.println(i)在 for 循环中,输出将是End:-2147483647。显然价值在i has 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 月)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与 Integer.MAX_VALUE 相比并使用 System.out.println 时 for 循环提前终止 的相关文章

随机推荐