我写了下面的代码,当我有打印语句而没有它时,它的答案不同.
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));
}
}
Run Code Online (Sandbox Code Playgroud)
没有印刷声明的答案是:
101, -2147483648, true
Run Code Online (Sandbox Code Playgroud)
并使用print语句:
15588, -2147468161, true
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,最终条件都应该返回false,但它会返回true.任何人都可以解释一下.
j <= Integer.MAX_VALUE根据定义,它总是如此.在这两种情况下,你的循环永远不会结束
如果将其更改为j < i,则循环将终止,并且无论print语句如何,都将返回相同的答案.
编辑
使用Netbeans/Oracle JDK 7u9测试代码时,循环永远不会按预期结束.然而,有些人报告说他们看到了问题中描述的相同行为.@auselen指向这个类似的帖子,它指的是一个bug.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |