तो बूलियन्स पर द्विआधारी ऑपरेटरों के लिए, जावा है &
, |
, ^
, &&
और ||
।
आइए संक्षेप में बताते हैं कि वे यहाँ क्या करते हैं:
- JLS 15.22.2 बूलियन लॉजिकल ऑपरेटर्स और, ^, और |
- JLS 15.23 सशर्त और ऑपरेटर और&
- JLS 15.24 सशर्त-या संचालक ||
के लिए
&
, परिणाम मानtrue
यदि दोनों ऑपरेंड मान हैंtrue
; अन्यथा, परिणाम हैfalse
।के लिए
|
, परिणाम मानfalse
यदि दोनों ऑपरेंड मान हैंfalse
; अन्यथा, परिणाम हैtrue
।के लिए
^
, परिणाम मान हैtrue
यदि ऑपरेंड मान भिन्न हैं; अन्यथा, परिणाम हैfalse
।
&&
ऑपरेटर की तरह है&
, लेकिन मूल्यांकन करता है अपने दायां संकार्य ही अगर अपने बाएं हाथ की मूल्य संकार्य हैtrue
।
||
ऑपरेटर की तरह है|
, लेकिन मूल्यांकन करता है अपने दायां संकार्य ही अगर अपने बाएं हाथ की मूल्य संकार्य हैfalse
।
अब, सभी 5 के बीच में, उन में से 3 यौगिक काम संस्करणों, अर्थात् है |=
, &=
और ^=
। तो मेरा प्रश्न स्पष्ट है: जावा प्रदान क्यों नहीं करता है &&=
और ||=
साथ ही साथ? मुझे लगता है कि मैं उन मैं जरूरत से अधिक की आवश्यकता को खोजने &=
और |=
।
और मुझे नहीं लगता कि "क्योंकि यह बहुत लंबा है" एक अच्छा जवाब है, क्योंकि जावा में है >>>=
। इस चूक का एक बेहतर कारण होना चाहिए।
12 असाइनमेंट ऑपरेटर हैं; [...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
एक टिप्पणी की गई थी कि यदि &&=
और ||=
लागू किया गया, तो वह केवल उन ऑपरेटरों कि पहले दाहिने हाथ की ओर का मूल्यांकन नहीं है किया जाएगा। मैं इस धारणा को मानता हूं कि एक यौगिक असाइनमेंट ऑपरेटर दाहिने हाथ की ओर का मूल्यांकन करता है पहले एक गलती है।
से 15.26.2 यौगिक असाइनमेंट ऑपरेटरों :
प्रपत्र
E1 op= E2
का एक मिश्रित असाइनमेंट अभिव्यक्ति के बराबर हैE1 = (T)((E1) op (E2))
, जहांT
प्रकार हैE1
, सिवाय इसके किE1
केवल एक बार मूल्यांकन किया जाता है।
सबूत के तौर पर, निम्नलिखित स्निपेट ए फेंकता है NullPointerException
, ए नहीं ArrayIndexOutOfBoundsException
।
int[] a = null;
int[] b = {};
a[0] += b[-1];