因此,对于在布尔二元运算符,Java有&,|,^,&&和||。
让我们在这里简要总结一下他们的工作:
对于
&,结果值是true两个操作数都为true; 否则,结果为false。对于
|,结果值是false两个操作数都为false; 否则,结果为true。对于
^,结果值是true操作数值是否不同;否则,结果为false。该
&&操作是一样&,但是评估其右边的操作数只有在其左侧的值操作数true。该
||操作是一样|的,但评估其右边的操作数只有在其左侧的值操作数false。
现在,所有5间,那些3有复合赋值版本,分别为|=,&=和^=。所以我的问题是显而易见的:为什么不是Java提供&&=和||=呢?我发现我需要那些比我更需要&=和|=。
而且我不认为“因为它太长”是一个很好的答案,因为Java具有>>>=。一定有一个更好的理由可以忽略这一点。
有12个赋值运算符;[...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
有人评论说,如果&&=和||=被实施,那么它将是唯一不首先评估右侧的运营商。我认为,复合赋值运算符首先评估右侧的这一观点是错误的。
形式的复合赋值表达式
E1 op= E2等效于E1 = (T)((E1) op (E2)),其中T是的类型E1,不同之处在于该表达式E1仅被评估一次。
为了证明这一点,以下代码段抛出NullPointerException,而不是ArrayIndexOutOfBoundsException。
int[] a = null;
int[] b = {};
a[0] += b[-1];