कुछ दिनों पहले, मैं एक आकर्षक परिदृश्य में भाग गया कि मुझे कोई प्रलेखन कैसे या क्यों नहीं मिल रहा है जावा निम्नलिखित होने देता है। (यह स्निपेट बग का एक सरलीकृत रूप है।)
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
ऊपर स्निपेट में:
यदि बूल = सत्य है, तो आपको '5' का मान मिलता है;
लेकिन अगर बूल = गलत है, तो आपको टर्नरी ऑपरेशन का मूल्यांकन करने की कोशिश करते समय एक अशक्त सूचक अपवाद मिलता है। प्रिंट स्टेटमेंट नहीं।
इसे ठीक करने के लिए मैं सिर्फ 'परिणाम' को बदलता हूं
Long result = bool ? Long.valueOf(intVal) : longVal;
ऐसा करने से मुझे अपेक्षित व्यवहार मिलेगा:
यदि बूल = सत्य है, तो आपको '5' का मान मिलता है;
लेकिन अगर बूल = गलत है, तो आप 'अशक्त' हैं
अब मज़े की बात यह है कि यदि आप इसे सामान्य रूप से विभाजित करते हैं / अन्यथा कथन करते हैं, तो जावा आपको संकलित नहीं करता है
longVal = intVal;
लेकिन यह ternary ऑपरेटर के माध्यम से नहीं पकड़ता है। तो जावा मूल स्निपेट में इसे शून्य बिंदु बनाने के लिए क्या कर रहा है?
(जावा ११)