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