2009-12-16 9 views

उत्तर

26

ऑटोबॉक्सिंग के कारण। 5 कोई ऑब्जेक्ट नहीं है इसलिए इसे किसी ऑब्जेक्ट में लपेटा गया है (Integer इस मामले में), और IntegerNumber है।

+1

इसे प्रमाणित करने के अपने आप को सिर्फ जोड़ने println (n.getClass() getName()।); – Buhb

+0

सवाल मुख्य रूप से अमूर्त वर्गों के बारे में था। – whiskeysierra

+1

नहीं, यह "संख्या एन = 5 कैसे करता है;" काम करता है यदि 'संख्या' सार है?" यह कैसे करता है इसके लिए ऊपर देखें। :) – Bombe

4

मूल रूप से, यह क्योंकि Number एक अमूर्त वर्ग है - कोई निर्माता कि Number(5) से मेल खाती है, और यहां तक ​​कि अगर वहाँ था तुम अब भी सीधे वर्ग का दृष्टांत है क्योंकि यह सार है में सक्षम नहीं होगा वहाँ है।

जैसा कि बोम्बे बताते हैं, आपके दूसरे मामले में आप वास्तव में Integer ऑब्जेक्ट बना रहे हैं * - जो Number के उप-वर्ग के रूप में, इस तरह के चर को असाइन किया जा सकता है। और चूंकि यह एक ठोस वर्ग है, आप इसे तुरंत चालू कर सकते हैं।

* हालांकि व्यवहार में यह वास्तव में Integer.valueOf(5) के बराबर है, जो सूर्य जेआरई पर एक अतिरिक्त इंटीजर ऑब्जेक्ट नहीं बनाएगा लेकिन पूल वाले संस्करण (जैसे फ्लाईवेट पैटर्न) का उपयोग करेगा।

+0

यह एक स्थिर वर्ग क्यों होना चाहिए? –

+0

+1 आपका उत्तर बोम्बे के मुकाबले बेहतर है, उसने अपने उत्तर में अमूर्त शब्द का भी उपयोग नहीं किया था, यही सवाल है कि प्रश्न – whiskeysierra

+0

@ करलोस - मेरा मतलब था * ठोस * वर्ग, स्थैतिक नहीं; मैंने इस टाइपो को ठीक किया है ("thinko"?), इसे इंगित करने के लिए धन्यवाद। AFAIK में स्थिर वर्ग के रूप में ऐसी कोई चीज़ नहीं है (स्थिर आंतरिक कक्षाओं को अनदेखा करना जो एक अलग चीज़ हैं)। –

-2

यह नहीं होना चाहिए। autoboxing एक बड़ी गलती है।

+4

मुझे असहमत होना होगा। int गलती है। भाषा सरल होगी सबकुछ एक इंटीजर (या लंबी या जो भी संख्या के उप-वर्ग के रूप में परिभाषित किया गया था) के रूप में परिभाषित किया जाएगा। फिर संकलक को इसे एक int (या जो भी आदिम में अनुकूलित करें) बेशक इसे == तरीके से संभालना होगा । – MrJacqes

3

यह कैसे काम करेगा निम्नलिखित के समान है:

List bob = new ArrayList(); 

सूची, एक अंतरफलक है, तो आप इसे सीधे का दृष्टांत नहीं कर सकते। हालांकि, आप प्रकार सूची का एक चर घोषित कर सकते हैं और उसके बाद उस ठोस ऑब्जेक्ट को असाइन कर सकते हैं जो उस इंटरफ़ेस को लागू करता है। एक ही पंक्ति के साथ, आप प्रकार संख्या का एक चर घोषित कर सकते हैं और उसके बाद उस मूल्य वस्तु को असाइन कर सकते हैं जो कि उस प्रकार का ठोस उदाहरण है। क्या आप कार्यात्मक कोड है सभी इरादों और उद्देश्यों के लिए (autoboxing के कारण), के साथ किया है:

Number n = new Integer(5); 
संबंधित मुद्दे