2017-01-23 49 views
10

निम्नलिखित कोड है:रैपर और स्वत: मुक्केबाजी

Integer time = 12; 
Double lateTime = 12.30; 
Boolean late = false; 
Double result = late ? lateTime : time; //Why here can I assign an Integer to a Double? 
System.out.println(result); 

यह प्रिंट:

12,0

यह एक संकलन नहीं है। क्यूं कर?

Integer time = 12; 
Double lateTime = 12.30; 
Double result = time;  //Integer cannot be converted to Double 
System.out.println(result); 
+0

डबल परिणाम = समय + 1.0; –

+0

संकलित भी करेगा [जावा ऑटोबॉक्सिंग और टर्नरी ऑपरेटर पागलपन] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/25417438/java-autoboxing-and-ternary-operator-madness) – Tom

उत्तर

12

अंतर जावा में टर्नरी ऑपरेटर व्यवहार के कारण हैं।


त्रिगुट सशर्त मामला:

अभिव्यक्ति late ? lateTime : time में, जावा होगा ऑटो Unbox वास्तव में अपने संबंधित आदिम प्रकार के तर्कों (late के मूल्य के अनुसार) में से एक। (आप timenull करने और latetrue को सेट करके ऐसा निरीक्षण कर सकते हैं: एक NullPointerExceptionनहीं फेंक दिया है एक ही लागू होता है जब null को lastTime और latefalse के लिए सेटिंग।।)

तो अभिव्यक्ति के मूल्य time हो जाएगा , तो यह को double पर बढ़ाया गया है।

किसी भी मामले में, परिणामी double को सौंपने में Double पर ऑटो-बॉक्स किया गया है।


सरल काम मामला:

Double result = time; लेखन में, जावा इस अनुमति नहीं देता है क्योंकि यह आपको अधिक स्पष्ट हो जाता है।


व्यक्तिगत तौर पर मैं भाषा के सबसे हानिकारक भागों में से एक होने के लिए बॉक्सिंग आदिम प्रकार के संबंध में जावा त्रिगुट सशर्त ऑपरेटर की व्यवस्था पाते हैं।

+0

ठीक है, लेकिन पहले उदाहरण में 'परिणाम 'हमेशा एक डबल है या एक इंटीजर में डाला जाता है? – Davide

+0

@Eran: मैं सटीक तंत्र के बारे में अधिक स्पष्ट हूं, और एनपीई स्टिंग को जोड़ा। – Bathsheba

+1

डबल परिणाम = समय + 1.0; संकलित भी होगा। वास्तव में ऐसा होगा + 0.0; और केवल हानिकारक शब्द के उपयोग के लिए +1। –

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