gpt4 book ai didi

java - Java 中的快捷方式 "or-assignment"(|=) 运算符

转载 作者:IT老高 更新时间:2023-10-28 11:41:00 25 4
gpt4 key购买 nike

我要在 Java 中进行一系列比较,我想知道其中一个或多个是否正确。比较字符串很长且难以阅读,因此为了便于阅读,我将其拆分,并自动使用快捷运算符 |= 而不是 negativeValue =negativeValue || boolean 值.

boolean negativeValue = false;
negativeValue |= (defaultStock < 0);
negativeValue |= (defaultWholesale < 0);
negativeValue |= (defaultRetail < 0);
negativeValue |= (defaultDelivery < 0);

如果任何默认 值为负,我希望 negativeValue 为真。这是有效的吗?它会达到我的预期吗?我在 Sun 的网站或 stackoverflow 上看不到它,但 Eclipse 似乎没有问题,并且代码可以编译并运行。


同样,如果我想执行多个逻辑交集,我可以使用 &= 代替 && 吗?

最佳答案

|= 是 boolean 逻辑运算符 | (JLS 15.26.2) 的复合赋值运算符 (JLS 15.22.2);不要与条件或 || ( JLS 15.24 ) 混淆。还有 &=^= 分别对应 boolean 逻辑 &^ 的复合赋值版本.

也就是说,对于boolean b1, b2,这两者是等价的:

 b1 |= b2;
b1 = b1 | b2;

逻辑运算符(&|)与条件运算符(&&||) 是前者不要“短路”;后者做。那就是:

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

所以回到你原来的问题,是的,这个结构是有效的,虽然 |= 不完全是 =|| 的等效快捷方式,它会计算你想要的。由于您使用的 |= 运算符的右侧是一个简单的整数比较操作,因此 | 不会短路这一事实无关紧要。

在某些情况下,需要甚至需要短路,但您的情况不是其中之一。

不幸的是,与其他一些语言不同,Java 没有 &&=||=。这在问题 Why doesn't Java have compound assignment versions of the conditional-and and conditional-or operators? (&&=, ||=) 中进行了讨论。 .

关于java - Java 中的快捷方式 "or-assignment"(|=) 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486472/

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