做&=和
换句话说,以下两个陈述的行为方式是一样的吗?
isFoobared = isFoobared && methodWithSideEffects();
isFoobared &= methodWithSideEffects();
我意识到我可以写一个测试,但有人可能会知道这一点,其他人可能会发现有用的答案。
  不, |=和&=不会短路,因为它们是&和|的复合赋值版本  ,它不会短路。 
JLS 15.26.2复合赋值运算符
  E1 op= E2形式的复合赋值表达式等价于E1 = (T)((E1) op (E2)) ,其中T是E1的类型,只是E1只计算一次。 
  因此,假设boolean & , isFoobared &= methodWithSideEffects()的等价性是: 
isFoobared = isFoobared & methodWithSideEffects(); // no shortcircuit
  另一方面&&和||  做shortcircuit,但莫名其妙地Java没有他们的复合赋值版本。  也就是说,Java既没有&&=也没有||= 。 
也可以看看
无论如何,这个短路业务是什么?
  该之间的差异boolean (逻辑运算符&和| )相比,他们的boolean条件同行( &&和|| )是,前者没有“短路”;  后者呢。  也就是说,假设没有例外等: 
&和|  总是评估两个操作数 &&和||  有条件地评估正确的操作数;  只有在其值可能影响二进制操作的结果时才评估右操作数。  这意味着在下列情况下不会评估右操作数: &&的左操作数评估为false false ) ||的左操作数  评估为true true ) 参考
& , ^和| && ||   不,他们不这样做,因为x &= y是x = x & y缩写, x |= y是x = x | y简写。  x = x | y 。  Java没有&&=或||=运算符,它们可以做你想做的事情。 
  &和|  运算符(以及~ , ^ , << , >>和>>> )是按位运算符。  对于任何整型,表达式x & y将执行按位和操作。  同样, |  执行按位或。  为了执行按位操作,数字中的每一位都被视为布尔值,其中1表示true , 0表示false 。  因此, 3 & 2 == 2 ,因为3是二进制的0...011 ,而2是0...010 。  同样, 3 | 2 == 3  3 | 2 == 3 。  维基百科对不同运营商有一个很好的完整解释。  现在,对于一个布尔值,我想你可以使用&和|离开  作为&&和||非短路等价物  ,但我无法想象为什么你会想要。 
上一篇: Do &= and
下一篇: = operator
