【发布时间】:2015-03-08 15:51:25
【问题描述】:
我的代码 sn-p 涉及进入 while 循环的两个条件,但我对以下代码的输出和预期结果感到困惑:
while (curr != null && key.compareTo(curr.getKey()) > 0) {
prev = curr;
curr = prev.getNext();
if (curr == null) {
System.out.println(curr + " is null");
}
}
当我运行这段代码时,我希望它会抛出一个空指针异常,因为 curr 为空并且我正在调用一个空方法,在打印出消息之后,但是它正常退出循环,我想知道这是否是正常行为?从这里看来,它确实一次评估一个条件,但我认为 while 循环在一个布尔表达式中评估括号内的所有内容?
我运行了一个测试,将操作数换成 && ,发现它确实抛出了一个空指针异常!这是什么原因?
问。 while 循环条件是作为一个整体进行评估,还是在决定是否进入循环之前一次评估一个条件?
【问题讨论】:
-
请注意,它与 while 循环行为无关。评估
&&的规则对于 if 条件、将结果分配给布尔变量等都是相同的。
标签: java loops while-loop