Yani boolelerde ikili operatörler için Java vardır &, |, ^, &&ve ||.
Burada yaptıklarını kısaca özetleyelim:
- JLS 15.22.2 Boolean Mantıksal Operatörler &, ^, ve |
- JLS 15.23 Koşullu ve Operatör &&
- JLS 15.24 Koşullu Veya Operatör ||
İçin
&, sonuç değeri,trueher iki işlenen değerintrue; aksi takdirde sonuç olurfalse.İçin
|, sonuç değeri,falseher iki işlenen değerinfalse; aksi takdirde sonuç olurtrue.Çünkü
^, sonuç değeri,trueişlenen değerlerinin farklı olmasıdır; aksi takdirde sonuç olurfalse.
&&Operatör gibidir&ama onun sol elin değeridir işleneninin sağ işlenen yalnızca değerlendirirtrue.
||Operatör gibidir|, ama onun sol elin değeridir işleneninin sağ işlenen yalnızca değerlendirirfalse.
Şimdi, bütün 5 arasında olanların 3 yani bileşik atama sürümleri var |=, &=ve ^=. Öyleyse sorum açık: Java neden &&=ve ||=aynı zamanda sağlamıyor ? Bunlara ihtiyacım olandan daha fazlasına ihtiyacım olduğunu görüyorum &=ve |=.
Ve "çok uzun olduğu için" nin iyi bir cevap olduğunu düşünmüyorum, çünkü Java var >>>=. Bu ihmal için daha iyi bir neden olmalı.
Gönderen 15.26 Atama Operatörleri :
12 atama operatörü vardır; [...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
Uygulanırsa &&=ve ||=uygulanırsa, ilk önce sağ tarafı değerlendirmeyen tek operatör olacağı yorumunda bulunuldu . Bir bileşik atama operatörünün önce sağ tarafı değerlendirdiği şeklindeki bu fikrin bir hata olduğuna inanıyorum.
15.26.2'den itibaren Bileşik Atama Operatörleri :
Formun bir bileşik atama ifadesi, yalnızca bir kez değerlendirilmesinin dışında , türünün olduğu yere
E1 op= E2eşdeğerdir .E1 = (T)((E1) op (E2))TE1E1
Kanıt olarak, aşağıdaki kod parçası bir NullPointerExceptiondeğil a atar ArrayIndexOutOfBoundsException.
int[] a = null;
int[] b = {};
a[0] += b[-1];