为什么 Java 没有条件和以及条件或运算符的复合赋值版本?(&&=, ||=)
因此,对于布尔值上的二元运算符,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];