【发布时间】:2013-09-14 17:43:04
【问题描述】:
我写了一段Java代码,它在无限循环中运行。
下面是代码:
public class TestProgram {
public static void main(String[] args){
Integer i = new Integer(0);
Integer j = new Integer(0);
while(i<=j && j<=i && i!=j){
System.out.println(i);
}
}
}
在上面的代码中,当看到while 循环中的条件时,起初看起来该程序不会进入while 循环。但实际上它是一个无限循环并不断打印值。
这里发生了什么?
【问题讨论】:
-
简单的答案是
i<=j && j<=i && i!=j这个条件总是为真。只需拿一张纸,评估一下你就能抓住它:) -
您创建整数的方式不正确。使用“比较”
-
如果您从不更改
i或j,您希望循环何时终止? -
@PradeepSimha 对于简单的 int 值,这总是会产生 false。从
i<=j和j<=i你可以得出结论,i == j与上一个术语相矛盾。因此,整个表达式的计算结果为 false,并且不会输入 while。关键是这里的对象标识! -
顺便说一句,这是 Java Puzzlers: Traps, Pitfalls, and Corner Cases 一书中的谜题 32。
标签: java