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