为什么这个if语句没有短路?

时间:2013-09-07 20:15:08

标签: java short-circuiting

我正在修复其他人的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缺少的空检查,这是在本部分之外完成的。)

1 个答案:

答案 0 :(得分:1)

&&运算符不可能短路。您是否正在使用&?如果不是,则意味着您做出了一些错误的假设,即前一个条件之前的条件是错误的。