2013-06-07 10 views
11

में होता है मैंने छोटा जावा कोड लिखा जो NullPointerException का कारण बनता है। क्या किसी के पास इसके लिए स्पष्टीकरण है? कोड:क्यों NullPointerException लघु IF

int val = 2; 
Boolean result = (val == 0) ? false : ((val == 1) ? true : null); 

इसके अलावा निम्नलिखित (सरलीकृत संस्करण) कोड का कारण होगा NullPointerException:

Object result = (false) ? false : (false ? true : null); 

लेकिन इस:

int val = 2; 
Boolean result = (val == 0) ? Boolean.FALSE : ((val == 1) ? true : null); 

और इस:

Object result = (false) ? Boolean.FALSE : (false ? true : null); 

या इस:

Object result = (false) ? (Boolean)false : (false ? true: null); 

नहीं है?

+2

'((वैल == 1)? सत्य: शून्य) 'यहां' शून्य 'को' झूठी 'में बदलें ?? – noMAD

+0

कई NullPointerExceptions – NINCOMPOOP

+0

@TheNewIdiot से बचने के लिए 'बूलियन' की बजाय 'बूलियन'' का उपयोग करें, इस मामले के लिए कोई फर्क नहीं पड़ता –

उत्तर

-1

जावा में, boolean केवल true और false की अनुमति देता है, लेकिन बूलियन की अनुमति देता है truefalse और NULL

+1

तो, एनपीई के लिए क्या कारण है? – sanbhat

+1

ओह स्नैप, यह एक टिप्पणी होना चाहता था और जवाब नहीं। @ ___ @ – noMAD

4

मुझे लगता है कि क्या हो रहा है कि ((val == 1) ? true : null) हमेशा null देता है और यह तो Unbox करने के लिए है कि एक boolean में कोशिश करता है। यह एक शून्य सूचक अपवाद का कारण बनता है।

मैंने यह कहने के बाद, @JonSkeet ने NullPointerException in ternary expression with null Long की वजह से अपने प्रश्न को डुप्लिकेट के रूप में चिह्नित किया है। उत्तर में एक और अधिक विस्तृत स्पष्टीकरण है।

+0

तो क्यों 'झूठी' को 'Boolean.FALSE' में बदलना उदाहरण में एनपीई को ठीक करें? – Jokii

0

int val = 2;

बूलियन परिणाम = (वैल == ओ)? सच्चा झूठा; // कोड से शून्य हटाएं और इसे सही से बदलें।

संबंधित मुद्दे