繁体   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