当我运行这个类时,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(使用前将#替换为@)