[英]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.