【问题标题】: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 的位运算。
如果您正在执行布尔逻辑,那么您需要 && 和 ||为了节省一些时间。
您不想使用 & 或 |关于布尔逻辑。
同样,如果您要对位进行计算,则使用 && 和 ||没有意义