Javaに条件演算子と条件演算子の複合代入バージョンがないのはなぜですか?(&& =、|| =)
だから、ブール型の二項演算子のために、Javaがあり&、|、^、&&と||。 ここで彼らが何をしているのかを簡単に要約しましょう: JLS 15.22.2ブール論理演算子&、^、および| JLS15.23条件付き-および演算子&& JLS15.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評価されるのは1回だけです。 証拠として、次のスニペットは、NullPointerExceptionではなく、をスローしArrayIndexOutOfBoundsExceptionます。 int[] a = null; int[] b = {}; a[0] += b[-1];