2010-05-21 17 views
5

क्या कोई मुझे जावा में अपने आदिम प्रकारों के स्थान पर इंटीजर, बूलियन आदि का उपयोग समझा सकता है?ऑब्जेक्ट या आदिम टाइप

मैं उनके द्वारा प्रदान किए जाने वाले फायदों को समझने के लिए प्रतीत नहीं कर सकता। वे शून्य मूल्यों को संभालने की अनावश्यक समस्याएं पैदा करते हैं।

धन्यवाद!

उत्तर

8

Boolean, Integer, Long, ... ऑब्जेक्ट्स हैं। आप उन स्थानों पर उनका उपयोग कर सकते हैं जहां आप आदिम प्रकारों का उपयोग नहीं कर सकते हैं, उदा।

  • उन्हें टेम्पलेट पैरामीटर
  • के रूप में उपयोग करते हुए एक Map
  • की तरह एक संग्रह में उन्हें भंडारण उन्हें बताए एक null मूल्य
  • उन्हें एक और अधिक सामान्य तरीके से उपयोग कर रहा है (जैसे LongNumber के रूप में)

उदाहरण:

new ArrayList<Integer>(); 
Long id = null; 
Number num = new Long(3); 
+0

उत्तर में जोड़ने के लिए, एक व्यावहारिक उदाहरण वेब-एप में सत्र संदर्भ में चर संग्रहित करेगा। – saugata

+0

न केवल मानचित्र, सभी कंटेनर कक्षाओं को उनके तत्वों को ऑब्जेक्ट होने की आवश्यकता होती है, इस प्रकार आदिम प्रकार इस बाधा को पूरा नहीं कर सकता है। और कंटेनर, मुझे लगता है, एक पहलू है जहां ऑब्जेक्ट उन्मुख भाषा है जो प्रक्रिया भाषा को जबरदस्त करती है, जो आपको अधिक सुविधा प्रदान करती है। :-) –

4

इंटीजर, बूलियन, और इसी तरह के लिए तर्क प्राचीन प्रकारों को उन संदर्भों में उपयोग करने की अनुमति देना है जिन्हें संदर्भ प्रकार की आवश्यकता होती है। क्लासिक उपयोग-केस संग्रह एपीआई है जो सेट, सूचियां, मानचित्र, कतार प्रदान करता है और इसी तरह तत्व प्रकार कुछ संदर्भ प्रकार होना चाहिए।

इस प्रकार मैं लिख सकते हैं:

List<Integer> list = new ArrayList<Integer>(); 

लेकिन अगले एक संकलन त्रुटि है:

List<int> list = new ArrayList<int>(); 

ध्यान दें कि आदिम आवरण प्रकार के लिए इस यूज-केस दोनों सामान्य प्रकार और "नया पहले का है "संग्रह एपीआई, और उन दिनों में वापस चला जाता है जहां केवल संग्रह प्रकार Vector और Hashtable के मूल (पूर्व-जेनेरिक) रूप थे, और उनके जैसे।

4

कभी-कभी आपको वास्तव में एक मूल्य की आवश्यकता होती है, उदाहरण के लिए यदि आपका ऐप उपयोगकर्ता डेटा संग्रहीत करता है, तो एक सामाजिक सुरक्षा # अज्ञात हो सकती है। उस स्थिति में -1 के बजाय शून्य को स्टोर करने के लिए क्लीनर है।

इसके अलावा ऐसी चीजें हैं जो आप आदिम प्रकारों से नहीं कर सकते हैं, जैसे उन्हें मानचित्र में संग्रहीत करना या बहुरूपता का उपयोग करना (डबल और इंटीजर दोनों संख्या के उदाहरण हैं)।

1

प्राइमेटिव हमेशा तेज होते हैं।
हालांकि कई बार वस्तुएं वास्तव में उपयोगी होती हैं:
1. उपक्रम। आपका कार्य एक तर्क के लिए संख्या ले सकता है (सभी संख्यात्मक वस्तुओं के लिए एक अभिभावक है: इंटीजर, फ्लोट, आदि)।
2. संभावित शून्य मूल्य। उदाहरण के लिए डेटाबेस में संग्रहीत करते समय इसका उपयोग किया जाता है। वस्तु शून्य हो सकती है, primitives मूल्य होना चाहिए। तो यदि डीबी में फ़ील्ड शून्य है, तो आदिम मूल्य के ऑब्जेक्ट संस्करण का उपयोग करना बेहतर है।
3. यदि फ़ंक्शन ऑब्जेक्ट लेता है और आप हमेशा इसे एक आदिम देते हैं तो ऑटोबॉक्सिंग पर खर्च होते हैं (ऑब्जेक्ट में आदिम मोड़ते हैं)। समारोह से लौटने के लिए वही।
4. ऑब्जेक्ट्स में कुछ विधियां हैं, जैसे getHashcode(), toString() इत्यादि, जो कुछ मामलों में वास्तव में उपयोगी हो सकती हैं।

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