我写了下面的代码,当我有打印语句而没有它时,它的答案不同.
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
并使用print语句:
15588, -2147468161, true
在这两种情况下,最终条件应返回false,但返回true.任何人都可以解释一下.
解决方法:
根据定义,j< = Integer.MAX_VALUE始终为true.在这两种情况下,你的循环永远不会结束
如果你把它改为j< i,循环将终止,无论print语句如何,都将返回相同的答案.
编辑
使用Netbeans / Oracle JDK 7u9测试代码时,循环永远不会按预期结束.然而,有些人报告说他们看到了问题中描述的相同行为. @auselen指向this similar post,指的是一个bug.
标签:java
来源: https://codeday.me/bug/20190723/1511310.html