小编典典

Wtat的意思是“ ^ =”吗?

java

我在Java中有很长的比较需要做,我想知道其中是否有一个或多个是正确的。比较字符串很长且难以阅读,因此为了便于阅读,我对其进行了分解,并自动使用快捷方式运算符|=而不是negativeValue = negativeValue || boolean

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

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


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


阅读 573

收藏
2020-11-30

共1个答案

小编典典

|=是这样的化合物赋值运算符(JLS
15.26.2
为布尔逻辑运算符)|JLS
15.22.2
);
不要与条件或混淆||JLS
15.24
)。也有&=^=对应于所述化合物分配版本布尔逻辑&^分别。

换句话说,对于boolean b1, b2,这两个是等效的:

 b1 |= b2;
 b1 = b1 | b2;

(逻辑运算符之间的差异&|)相比,他们的条件同行(&&||)之处在于前者不“短路”; 后者可以。那是:

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

所以回到你原来的问题,是的,结构是有效的,虽然|=是不完全的等价快捷=||,这你想要做什么的计算。由于|=您使用的运算符的右侧是一个简单的整数比较运算,因此|不会短路的事实微不足道。

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

不幸的是,与某些其他语言不同,Java没有&&=and ||=。问题 Java为什么不为条件和和条件或运算符提供复合赋值版本? (&& =,||
=)

2020-11-30