gpt4 book ai didi

java - 在 Java 中 &= 和 |= 会短路吗?

转载 作者:IT老高 更新时间:2023-10-28 20:58:26 27 4
gpt4 key购买 nike

换句话说,以下两个语句的行为方式是否相同?

isFoobared = isFoobared && methodWithSideEffects();
isFoobared &= methodWithSideEffects();

我意识到我可以写一个测试,但有人可能会立即知道这一点,而其他人可能会发现答案很有用。

最佳答案

不,|=&= 不会短路,因为它们是 &|< 的复合赋值版本,不会短路。

JLS 15.26.2 Compound Assignment Operators

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

因此,假设 boolean &isFoobared &= methodWithSideEffects() 的等价是:

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

另一方面,&&|| 会短路,但令人费解的是,Java 没有针对它们的复合赋值版本。也就是说,Java既没有&&=也没有||=

另见


这到底是什么短路业务?

boolean 逻辑运算符(&|)与其对应的 boolean 条件运算符( &&||) 是前者不“短路”;后者做。也就是说,假设没有异常(exception)等:

  • &| 总是 计算两个操作数
  • &&||有条件地评估右操作数;只有当右操作数的值会影响二元运算的结果时,才会计算右操作数。这意味着在以下情况下不评估右操作数:
    • && 的左操作数计算结果为 false
      • (因为无论正确的操作数计算成什么,整个表达式都是false)
    • || 的左操作数计算结果为 true
      • (因为无论正确的操作数计算为什么,整个表达式都是true)

引用文献

关于java - 在 Java 中 &= 和 |= 会短路吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3152208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com