的
|=是这样的化合物赋值运算符(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为什么不为条件和和条件或运算符提供复合赋值版本? (&& =,||
=)。



