Ben*_*Ben 8 java int for-loop 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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1
3
5
...
31173
31175
End:31177
Run Code Online (Sandbox Code Playgroud)
为什么它会在那里结束?有趣的是,如果我System.out.println(i)在for循环中删除了,那么输出就是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)
Run Code Online (Sandbox Code Playgroud)
Pet*_*rey 15
它是Java 6中的一个已知错误.JIT错误地优化了循环.我相信更新的Java版本没有这个bug.
http://vanillajava.blogspot.co.uk/2011/05/when-jit-gets-it-wrong.html
Java 6更新16刚刚超过两年.如果您无法更新到Java 7,我建议您更新到最新版本的Java 6 update 25.
BTW Java 6将在几个月内完成免费支持(2012年12月)