短路评估

时间:2014-11-07 20:49:01

标签: lazy-evaluation evaluation

我明白&和&&运营商的语言不同。例如

if(condition1 && condition2)
如果condition1为true,

将仅评估condition2,并且

if(condition1 & condition2)
无论条件1是否为真,

都将评估condition1和condition2。我的问题是你何时应该使用&过度&& (和|和||分别),因为结果总是相同的。

2 个答案:

答案 0 :(得分:1)

结果并不总是一样的。您可能会将condition1condition2视为完全评估的变量或常量,但它们可能是具有副作用的函数调用,或者condition2如果{{1}的值可能未定义是一种方式或另一种方式。 (这个典型的例子可能是

condition1

根据我的经验,我几乎从未遇到过需要进行非短路评估的情况,至少不是if (x != null && x.isCondition()) { x.doSomething(); } 条款。

答案 1 :(得分:0)

&安培;和|是按位运算符,这意味着它们采用左和右值并在它们之间执行AND或OR运算。

如果你正在做一个布尔逻辑,那么你想要&&和||为了节省一些时间。

你不想使用&或者在布尔逻辑上。

同样,如果您正在对位进行计算,那么使用&&和||没有意义