这是 JVM 错误还是“预期行为”?
我注意到一些意想不到的行为(相对于我个人的期望来说出乎意料),我想知道JVM中是否存在错误,或者这是否是一个边缘情况,我不明白究竟应该发生什么的一些细节。假设我们自己在 main 方法中有以下代码:
int i;
int count = 0;
for(i=0; i < Integer.MAX_VALUE; i+=2){
count++;
}
System.out.println(i++);
一个天真的期望是,这将打印,最大的甚至可代表的。但是,我相信整数算术应该在Java中“翻转”,因此将1添加到应该会导致.由于 仍然小于 ,循环会不断迭代负整数。最终它将返回到 0,并且此过程应作为无限循环重复。Integer.MAX_VALUE-1
int
Integer.MAX_VALUE
Integer.MIN_VALUE
Integer.MIN_VALUE
Integer.MAX_VALUE
当我实际运行此代码时,我得到非确定性结果。打印的结果往往在五十万左右,但确切的值各不相同。因此,当我认为循环应该是一个无限循环时,它不仅终止了,而且它似乎是随机终止的。这是怎么回事?
我的猜测是,这要么是JVM中的一个错误,要么是有很多时髦的优化正在进行,这使得这种预期的行为。这是什么?