मैंने हाल ही में कोड के निम्नलिखित दो स्निपेट चलाने की कोशिश की और आउटपुट में आश्चर्यचकित हुआ।शॉर्ट सर्किट बूलियन अभिव्यक्तियों में अनबॉक्सिंग कैसे काम करता है?
पहले:
// ...
System.out.println((Boolean)null || true);
// ...
दूसरा:
// ...
System.out.println((Boolean)null || false);
// ...
निम्नलिखित उत्पादन में पहला उदाहरण परिणाम: निम्न उत्पादन में
सच
दूसरे उदाहरण के परिणाम:
थ्रेड "मुख्य" जावा में अपवाद a.lang.NullPointerException
com.blah.main पर (SanityCheck.java:26)
मैं करूंगा है सोचा दोनों उदाहरण, एक नल पॉइंटर एक्सेप्शन में परिणाम चाहिए के रूप में किसी भी छोटे-सर्किटिंग लागू किया जाता है बाईं दाहिनी ओर। बूलियन से बूलियन को अनबॉक्स करने का प्रयास तार्किक के दूसरी तरफ से असफल होना चाहिए था या विचार किया गया था।
क्या कोई इस असंगत व्यवहार को समझा सकता है?
यह व्यवहार [जेएलएस] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24) के साथ असंगत प्रतीत होता है "रन टाइम पर, बाएं - ऑपरेंड अभिव्यक्ति का मूल्यांकन पहले किया जाता है; यदि परिणाम में बूलियन टाइप किया गया है, तो इसे अनबॉक्सिंग रूपांतरण के अधीन किया जाता है " –
SanityCheck.java – arynaq