我注意到了一些意外的行为(相对于我的个人期望而言是意外的),我想知道是否是JVM中存在错误,或者这可能是一种边缘情况,在这种情况下我不了解某些确切的细节应该发生。假设我们自己在main方法中具有以下代码:
int i;
int count = 0;
for(i=0; i < Integer.MAX_VALUE; i+=2){
count++;
}
System.out.println(i++);
天真的期望是这样会印刷Integer.MAX_VALUE-1
,最大的甚至可以代表int
。但是,我认为整数算术应该在Java中“翻转”,因此将1加到会Integer.MAX_VALUE
导致Integer.MIN_VALUE
。由于Integer.MIN_VALUE
仍然小于Integer.MAX_VALUE
,因此循环将循环遍历负数甚至整数。最终它将回到0,并且此过程应作为无限循环重复进行。
当我实际运行此代码时,会得到不确定的结果。打印的结果往往大约为一百万,但是确切的值却有所不同。因此,当我认为循环应该是无限循环时,循环不仅终止了,而且似乎随机终止了。这是怎么回事?
我的猜测是,这要么是JVM中的错误,要么是正在进行许多时髦的优化,从而产生了预期的行为。哪有