我正在修复其他人的Java代码中的错误,但我无法解释该错误。有问题的代码是以下if语句:
if (locked && DEBUG_ENABLED
&& owner != null
&& (owner.equals(playerName) || subowner.equals(playerName))
&& handleCommand(playerName, message)) {
....
} else {
....
}
其中DEBUG_ENABLED
初始化为private static boolean DEBUG_ENABLED = false;
,handleCommand
功能如下:
public boolean handleCommand(String name, String msg) {
if(msg.equals("Command1")) {
....
} else if(msg.equals("Command2")) {
....
} ....
} else { // No matching command
return false;
}
return true;
}
让我感到困惑的是,即使DEBUG_ENABLED
设置为false,代码仍会调用并执行handleCommand
函数。我一直以为这不应该因为短路而发生。
if-statement本身的总计仍被评估为false,因为只执行第一个片段中else-block内的代码。
那么,这个if语句怎么会这样呢?它是否未能短路,或者我是否误解了原理,或者这部分代码是否存在完全不同的错误? (除了subowner
缺少的空检查,这是在本部分之外完成的。)
答案 0 :(得分:1)
&&
运算符不可能短路。您是否正在使用&
?如果不是,则意味着您做出了一些错误的假设,即前一个条件之前的条件是错误的。