布尔运算符的区别:&和&&,|和||

125

我知道 &&|| 的规则,但是 &| 是什么意思?请用示例解释一下。


请参考这篇很好的解释:https://dev59.com/S2w05IYBdhLWcg3wqzms - JavaGeek
11个回答

0

虽然基本差别在于&主要用于位操作,通常在longintbyte上使用,它可以用作一种掩码,但即使您使用它代替逻辑&&,结果可能也会有所不同。

在某些情况下,差异更为明显:

  1. 评估某些表达式需要时间
  2. 仅当前一个表达式为真时,才能评估其中一个表达式
  3. 这些表达式具有某些副作用(有意或无意)

第一个观点非常直接,不会引起错误,但需要更多时间。如果在一个条件语句中有几个不同的检查,请将那些更便宜或更有可能失败的检查放在左边。

对于第二个观点,看看这个例子:

if ((a != null) & (a.isEmpty()))

这对于null失败,因为评估第二个表达式会产生NullPointerException。逻辑运算符&&是懒惰的,如果左操作数为false,则结果无论右操作数如何都为false。

第三点的示例--假设我们有一个使用DB而没有任何触发器或级联的应用程序。在删除Building对象之前,我们必须将Department对象的building更改为另一个对象。让我们还假设操作状态作为布尔值返回(true = success)。那么:

if (departmentDao.update(department, newBuilding) & buildingDao.remove(building))

这将评估两个表达式,因此即使由于某些原因部门更新失败,也会执行建筑物删除。使用 &&,它按预期工作,并在第一次失败后停止。

至于 a || b,它等同于 !(!a && !b),如果 a 为真,则停止,不需要更多解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接