我写了下面的代码,当我有打印语句和没有打印语句时,它的回答是不同的。
class test
{
public static void main(String args[])
{
int i = Integer.MAX_VALUE;
int j = Integer.MAX_VALUE-100;
int count = 0;
for(; j<=i; j++){
count++;
//System.out.println(j); // If we remove comment, answer is different
}
System.out.println(count + ", " + j + ", " + (j<=i));
}
}
没有打印语句的答案是:
101, -2147483648, true
打印语句是:
15588, -2147468161, true
在这两种情况下,最终条件都应返回 false
,但它返回 true
。谁能解释一下。
最佳答案
j <= Integer.MAX_VALUE
根据定义始终为真。在这两种情况下,您的循环永远不会结束。
如果将其更改为 j < i
,循环将终止,并且无论打印语句如何,都将返回相同的答案。
编辑
使用 Netbeans/Oracle JDK 7u9 测试代码时,循环永远不会按预期结束。然而,一些人报告说他们看到了与问题中描述的相同的行为。 @auselen 指向 this similar post这是指一个错误。
关于Java 溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307960/