栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中&=和| =会短路吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中&=和| =会短路吗?

不,

|=
&=
没有短路,因为它们的复合赋值版本
&
|
等不短路。

[JLS

15.26.2复合赋值运算符](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.2)

形式的复合赋值表达式

E1 op= E2
等效于
E1 = (T)((E1) op(E2))
,其中
T
是的类型
E1
,不同之处在于该表达式
E1
仅被评估一次。

因此,假设

boolean &
的等价为
isFoobared &= methodWithSideEffects()

isFoobared = isFoobared & methodWithSideEffects(); // no shortcircuit

在另一方面

&&
||
做短路,但令人费解的Java没有为他们复合赋值版本。也就是说,Java既
&&=
没有,也没有
||=


反正这是什么短路业务?

该之间的差异

boolean
(逻辑运算符
&
|
)相比,他们的
boolean
条件同行(
&&
||
)之处在于前者不“短路”;
后者可以。也就是说,假设没有异常等:

  • &
    |
    始终 评估两个操作数
  • &&
    有条件地
    ||
    评估正确的操作数; 仅当右操作数的值可能影响二进制运算的结果时,才对右操作数进行求值。这意味着在以下情况下不会评估正确的操作数: __
    • 的左操作数
      &&
      计算为
      false
    • (因为无论正确的操作数求值是什么,整个表达式都是
      false
    • 的左操作数
      ||
      计算为
      true
    • (因为无论正确的操作数求值是什么,整个表达式都是
      true

参考文献

  • JLS 15.22.2布尔逻辑运算符
    &
    ^
    |
  • JLS 15.23条件与运算符
    &&
  • JLS 15.24条件或运算符
    ||


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号