【问题标题】:Short-circuit evaluation短路评估
【发布时间】:2014-11-07 20:49:01
【问题描述】:

我了解 & 和 && 运算符在多种语言中的不同之处。例如

if(condition1 && condition2)

仅在条件 1 为真时评估条件 2,并且

if(condition1 & condition2)

将评估条件1 和条件2,而不管条件1 是否为真。我的问题是什么时候应该使用 & 而不是 &&(分别是 | 和 ||),因为结果总是一样的。

【问题讨论】:

    标签: lazy-evaluation evaluation


    【解决方案1】:

    结果并不总是相同的。您可能将condition1 和condition2 视为完全评估的变量或常量,但它们可能是具有副作用的函数调用,或者如果condition1 的值是一种或另一种,则condition2 可能未定义. (这方面的典型例子可能是

    if (x != null && x.isCondition()) { x.doSomething(); }
    

    根据我的经验,我几乎从未遇到过需要非短路评估的情况,至少在if 子句中没有。

    【讨论】:

      【解决方案2】:

      & 和 |是按位运算符,这意味着它们取左右值并在它们之间进行 AND 或 OR 的位运算。

      如果您正在执行布尔逻辑,那么您需要 && 和 ||为了节省一些时间。

      您不想使用 & 或 |关于布尔逻辑。

      同样,如果您要对位进行计算,则使用 && 和 ||没有意义

      【讨论】:

        猜你喜欢
        • 2015-11-14
        • 2017-01-21
        • 2012-02-10
        • 2010-12-21
        • 1970-01-01
        • 2013-05-21
        • 2021-11-21
        • 2016-11-26
        • 2019-05-12
        相关资源
        最近更新 更多