2012-01-03 11 views
6

यदि कोई विधि डबल लौटाती है, तो हम उस विधि को "डबलवैल्यू" क्यों कहते हैं? यह पहले से ही एक डबल और गणना देता है, सही ढंग से मूल्यांकन करने के लिए प्रतीत होता है।जावा में डबल बनाम डबलव्यू

उत्तर

9

जावा 1.5 से पहले ऑटो-मुक्केबाजी (और अनबॉक्सिंग) जावा में मौजूद नहीं था। तो, आपको डबल से अंतर्निहित आदिम निकालने के लिए इसकी आवश्यकता होगी।

यदि आप ऑटो-मुक्केबाजी से अपरिचित हैं, तो आप यहां और पढ़ सकते हैं। http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

+0

तो लिंक से यह सुझाव देता है कि आप ऑटोबॉक्सिंग और ऑटोऑनबॉक्सिंग से प्रदर्शन हिट करते हैं। एक प्रदर्शन महत्वपूर्ण लूप में, क्या आप अनगिनत जुर्माना से बचने के लिए myDouble.doubleValue() को कॉल कर सकते हैं? – MedicineMan

+2

@MedicineMan नहीं, अनबॉक्सिंग सिर्फ इतना है कि संकलक 'डबल foo = myDouble' को आपके लिए' double foo = myDouble.doubleValue() 'में बदल देगा - विधि को स्पष्ट रूप से कोई फर्क नहीं पड़ता। प्रदर्शन हिट का बड़ा हिस्सा बॉक्स में 'डबल' ऑब्जेक्ट को पहले स्थान पर बनाया गया है (और, शायद कम डिग्री पर, मूल्य पर प्राप्त करने के लिए एक स्टैक var के बजाय हीप मेमोरी तक पहुंचने में)। – yshavit

+0

यशवित ने इसे दबाया। दंड से बचने का एकमात्र तरीका डबल <--> डबल के बीच किसी भी संक्रमण से बचने के लिए है। हालांकि, यह अक्सर अव्यवहारिक होता है, खासकर यदि आप किसी भी संग्रह का उपयोग करना चाहते हैं। इसके अलावा, यह एक * बहुत * दुर्लभ मामला होगा जहां यह वास्तव में एक आवेदन के लिए एक प्रदर्शन बाधा है। – rfeak

1

बॉक्स किए गए ऑब्जेक्ट से आदिम डेटा प्रकार में कनवर्ट करने के लिए आप डबल ऑब्जेक्ट पर 'डबलवैल्यू' कहते हैं। चूंकि अधिकांश बार डबल को डबल-अनबॉक्स किया जाता है, इसलिए आपको आमतौर पर ऐसा करने की आवश्यकता नहीं होती है, लेकिन यदि आप अपने रूपांतरण में स्पष्ट होना चाहते हैं, तो आप इस विधि को कॉल कर सकते हैं।

1

यदि आप से प्राप्त करने की आवश्यकता है तो आप doubleValue पर कॉल करेंगे। पूर्व एक आदिम प्रकार है, जबकि उत्तरार्द्ध एक रैपर ऑब्जेक्ट प्रकार है, जो मूल रूप से एक अपरिवर्तनीय वस्तु के अंदर एक आदिम मूल्य encapsulates। यदि संभव हो (और मैं इसे आपके कोड के बिल्कुल सही उद्देश्य के बिना कह रहा हूं), तो अपनी सभी गणनाओं के लिए double का उपयोग करें; केवल Double का उपयोग करें यदि आपको Collection या Map में मानों को संग्रहीत करने की आवश्यकता है; ऐसा इसलिए है क्योंकि ऑब्जेक्ट प्रकार अधिक मेमोरी का उपभोग करते हैं और कास्टिंग ऑपरेशंस के अधीन हो सकते हैं।

doubleDouble के साथ गलती करना आसान है (एक ही चीज अन्य आदिम प्रकार बनाम रैपर प्रकारों के लिए लागू होती है), क्योंकि संकलक ऑटो-मुक्केबाजी (और ऑटो -नबॉक्सिंग), इसलिए सही प्रकार का उपयोग करने के लिए थोड़ी सावधानी बरतनी चाहिए।

+0

और बस इसे थोड़ा जोड़ने के लिए, और स्पष्ट रूप से यह बताएं: गणितीय परिचालन और परीक्षण (अंकगणित, तुलना, आदि) 'डबल', केवल 'डबल' के साथ नहीं किया जा सकता है। – yshavit

1

doubleValue एक आदिम डबलडबल वस्तु से वापस आती है। परिदृश्य के आधार पर, आप एक डबल से डबल प्राप्त करना चाहते हैं।

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