दिलचस्प पोस्ट
UITextField संपादित करते समय कीबोर्ड को कैसे खारिज करते हैं SQL सर्वर – संभावित धुएं समाधान? एंड्रॉइड स्टूडियो: ड्रायबल फ़ोल्डर: एकाधिक डीपीआई के लिए छवियाँ कैसे डालें? नई लाइन द्वारा PHP स्ट्रिंग विस्फोट डोम के साथ तालिका का गतिशील निर्माण जावा में घोषणा "डबल-चेक लॉकिंग टूटी हुई" घोषित करने के लिए कैसे करें? एएसपी.एन.टी.नेट स्क्रिप्ट बंडलों और स्रोत मानचित्रों को पुन: संयोजन करना Addlashes के माध्यम से SQL इंजेक्शन के उदाहरण ()? मैं मेकफाइल लक्ष्य में बास सिंटैक्स का उपयोग कैसे कर सकता हूं? अभिव्यक्ति के साथ ggplot2 दो-पंक्ति लेबल ग्रहण त्रुटि, हाल ही के अपडेट के बाद आर.जेवा फाइल गायब है वस्तु का संदर्भ वस्तु की आवृत्ति अनुसार सेट नहीं. है। Qt में फॉर्म लेआउट तंत्र को समझना पूरी स्क्रीन के लिए एक नियंत्रण रिश्तेदार का स्थान प्राप्त करना? हैश तालिका / एसोसिएटिव ऐरे VBA में

अजीब जावा व्यवहार टर्नरी ऑपरेटर

यह कोड काम क्यों करता है?

Float testFloat = null; Float f = true ? null : 0f; 

और यह एक अपवाद क्यों फेंक देता है?

 Float testFloat = null; Float f = true ? testFloat : 0f; 

लेकिन सबसे अजीब बात यह है कि यह कोड बिना किसी अपवाद के सफलतापूर्वक चलाया जाता है:

 Float testFloat = null; Float f = testFloat; 

ऐसा लगता है कि जावा के टर्नरी ऑपरेटर का व्यवहार बदलता है। क्या कोई समझा सकता है कि यह क्यों है, कृपया?

Solutions Collecting From Web of "अजीब जावा व्यवहार टर्नरी ऑपरेटर"

यह व्यवहार जेएलएस – कंडीशनल ऑपरेटर में निर्दिष्ट है:

यदि दूसरा और तीसरा ऑपरैन्ड में से कोई एक आदिम प्रकार टी का है, और दूसरे का प्रकार टी को मुक्केबाजी रूपांतरण (§5.1.7) लागू करने का परिणाम है, तो सशर्त अभिव्यक्ति का प्रकार टी है

जोर मेरा तो, 2 एन डी मामले में:

 Float f = true ? testFloat : 0f; 

चूंकि 3 ऑपरेंम आदिम प्रकार ( T ) है, अभिव्यक्ति का प्रकार फ्लोट प्रकार होगा – T इसलिए, अनबॉक्स्ड टेस्टफ्लॉट जो वर्तमान में एक null संदर्भ है, float लिए एनपीई का परिणाम होगा।


1 मामले के लिए, प्रासंगिक भाग अंतिम है:

अन्यथा, दूसरा और तीसरा ऑपरेटिंग क्रमशः एस 1 और एस 2 प्रकार के होते हैं। T1 को ऐसे प्रकार दें, जो मुक्केबाजी रूपांतरण को एस 1 से लागू करने के परिणामस्वरूप, और टी 2 को ऐसे प्रकार बताएं जो मुक्केबाजी रूपांतरण को एस 2 के लिए लागू करने से परिणाम प्राप्त करें। सशर्त अभिव्यक्ति का प्रकार कैश रूपांतरण (§5.1.10) को लॉब (टी 1, टी 2) (§15.12.2.7) के लिए लागू करने का नतीजा है।

इसलिए, इस के अनुसार:

 null type - S1 float - S2 null type - T1 (boxing null type gives null type) Float - T2 (float boxed to Float) 

और फिर सशर्त अभिव्यक्ति का प्रकार बन जाता है – Floatnull की अनब्लॉकिंग की आवश्यकता है, और इसलिए कोई NPE नहीं।