java - त्रिगुट ऑपरेटर में अवांछित NullPointerException हो रही है-क्यों?




double conditional-operator (2)

जब आप लिखते हैं

value = condition ? null : 1.0;

condition ? null : 1.0 के प्रकार condition ? null : 1.0 condition ? null : 1.0 एक संदर्भ प्रकार होना चाहिए, इसलिए प्रकार है Double , जो मान हो सकता है null

जब आप लिखते हैं

value = condition ? getDouble() : 1.0;

और getDouble() रिटर्न null , यह लिखित के बराबर बताया गया है:

value = condition ? ((Double) null) : 1.0;

इस मामले में संकलक एक देखता है Double और एक double त्रिगुट सशर्त ऑपरेटर के 2 और 3 तर्क के रूप में, और फैसला करता है अभिव्यक्ति की है कि प्रकार होना चाहिए double । इसलिए यह unboxes null करने के लिए double हो रही NullPointerException

सशर्त त्रिगुट ऑपरेटर के प्रकार में कुछ तालिकाओं से निर्धारित होता है JLS 15.25

2 और 3 ऑपरेंड हैं null और double , सशर्त अभिव्यक्ति प्रकार के कम से कम ऊपरी बाध्य है Double और null है, जो Double

2 और 3 ऑपरेंड हैं Double और double , सशर्त अभिव्यक्ति प्रकार है double

निम्नलिखित कोड को क्रियान्वित करते हैं, मैं एक हो रही है NullPointerException लाइन पर:

value = condition ? getDouble() : 1.0;

पहले लाइनों में जब मैं का उपयोग null बजाय getDouble() सब कुछ काम करता है और यह अजीब है।

public class Test {
    static Double getDouble() {
        return null;
    }

    public static void main(String[] args) {
        boolean condition = true;
        Double value;

        value = condition ? null : 1.0;         //works fine
        System.out.println(value);              //prints null

        value = condition ? getDouble() : 1.0;  //throws NPE
        System.out.println(value);
    }
}

किसी की मदद कर सकते हैं मुझे इस व्यवहार को समझने?


देखें #jls-15.25 :

2 संकार्य है Double , जबकि 3 संकार्य है double , परिणाम:

getCount() == 1 ? getDouble() : 1.0

एक double

और जब आप एक बदलने की कोशिश Double null (द्वारा दिया getDouble() ) को double , NPE फेंक दिया जाएगा।







conditional-operator