[英]Why doesn't this if-statement short circuit?
我目前正在修复他人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
函数。 我一直认为这不应该由于短路而发生。 由于仅执行第一个片段中else块内的代码,因此if语句本身总共仍被评估为false。
那么,这个if语句的表现如何呢? 是不是短路,还是我误解了原理,或者这部分代码有完全不同的错误? (除了缺少子subowner
空检查之外,这是在此部分之外完成的。)
&&
操作符不可能无法短路。 您是否正在使用&
? 如果不是,则意味着您做出了一些错误的假设,即在最后一个条件之前的先前条件是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.