我目前正在修复其他人的 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 语句本身仍然被评估为 false,因为只有第一个片段中 else 块内的代码被执行。
那么,这个 if 语句怎么会这样呢?是短路失败,还是我误解了原理,或者这部分代码有什么完全不同的错误?(除了缺少的空检查subowner
之外,这是在这部分之外完成的。)