3

我目前正在修复其他人的 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之外,这是在这部分之外完成的。)

4

1 回答 1

1

&&操作员短路是不可能的。你&用过吗?如果不是,则意味着您做出了一些错误的假设,即最后一个条件之前的条件是错误的。

于 2013-09-07T20:22:03.010 回答