簡體   English   中英

為什么該if語句不短路?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM