2017-04-05 51 views
5

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

उदाहरण के लिए, मान लीजिए कि हमें दो फ्लोटिंग मान लेना है, यदि हम डबल का उपयोग करते हैं, तो हम आसानी से a==b का उपयोग करके तुलना कर सकते हैं, जबकि यदि हम डबल का उपयोग करते हैं, तो हमें a.equals(b) का उपयोग करना होगा।

+2

उम्मीद है कि फ्लोट पर '==' तुलना केवल एक उदाहरण है :) http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java – jensgram

उत्तर

3

दृश्यों के पीछे से कहीं अधिक है।

List<int> myList 
जावा में

: कारणों में से एक

पर विचार करें कि आप बस की तरह कुछ भी नहीं कर सकते हैं कि कैसे संग्रह एपीआई जावा में विकसित किया गया है ...। आपको

List<Integer> myList 

के लिए रैपर की आवश्यकता होगी क्योंकि संग्रह वस्तुओं के साथ काम करते हैं और प्राइमेटिव नहीं।

int x = 17; 

अब, आवरण आप कर सकते हैं करने के लिए धन्यवाद:

दूसरी ओर, रैपर वस्तुओं कि डेवलपर्स के तरीकों/स्थिरांक का एक अच्छा समूह की पेशकश है कि "तेज और आसान" की तरह कुछ कार्यों हैं :

String pars= Integer.toBinaryString(x); 
pars= Integer.toHexString(x); 
Integer.MAX_VALUE; 
Integer.highestOneBit(x); 

कि बिना आप, गर्दन में दर्द हो जाएगा के बाद से आदिम x ज्यादा नहीं उपयोगी आप ऐसा करने के लिए है।

+0

पर साइड नोट, उदाहरण के लिए "जावा के लिए आदिम संग्रह" के कार्यान्वयन हैं: http://pcj.sourceforge.net –

2

जब आप Collections का उपयोग करते हैं तो आपको ऑब्जेक्ट्स का उपयोग करना होगा, न कि प्राइमेटिव्स।

List<double> list = new ArrayList<double>; // not allowed 
List<Double> list = new ArrayList<Double>; // allowed 
Map<double, String> map = new HashMap<double, String>(); // not allowed 
Map<Double, String> map = new HashMap<Double, String>(); // allowed 

या यदि आप चाहते हैं कि आपका Double शून्य हो। Hibernate की संस्थाओं के साथ और साथ उदाहरण के लिए उपयोगी DTO or POJO

private int number; // default: 0 
private Integer number; // default: null 

Double आप इसे पर पा सकते हैं आप जल्दी डाली करने के लिए

double.intValue(); 
double.toString(); 
6

की अनुमति देता है blog

1. सबसे पहले

डबल एक संदर्भ प्रकार है ताकि आप इसे टेम्पलेट तर्क के रूप में उपयोग कर सकें ument

उदाहरण के लिए:

public class Tmp<T> { 
    public Tmp() { 
    } 
} 

आप उस तरह एक वर्ग बनाना चाहते हैं।

तब आपको ऑब्जेक्ट बनाने के दौरान संदर्भ प्रकार पास करना होगा। उदाहरण के लिए

new Tmp<Integer>() 

आपको एक त्रुटि अगर आप की तरह वस्तु बनाने के मिल जाएगा:

new Tmp<int>() 

2. दूसरा

केवल आवरण वर्गों में से है क्योंकि यह सामान्य डेटाप्रकार प्रोग्रामिंग के लिए संभव है ।

उदाहरण के लिए बेलो विधि किसी भी प्रकार की संख्या (Byte, Integer, Double, Short, Float, Long, BigDecimal, BigInteger, AtomicInteger, AtomicLong) स्वीकार करती है और Integer उस संख्या के अतिरिक्त लौटाती है।

public Integer add(Number a, Number b){ 
    return a.intValue() + b.intValue(); 
} 

3. तीसरा

जावा के पुराने संस्करण में autoboxing और AutoUnboxing का समर्थन नहीं कर रहा है। तो, यदि आप जावा के उस संस्करण का उपयोग करते हैं तो आप दोनों को आसानी से अंतर कर सकते हैं।

उदाहरण के लिए आप जावा 1.4 या तो पुराने संस्करण का उपयोग करता है, तो:

Integer a = 1; // Auto Boxing(Not Works) 
Integer a2 = new Integer(2); // Boxing (It Works) 

4. चौथा

दोनों का भंडारण भी अलग आदिम प्रकार Stack में जमा हो जाती है, जबकि संदर्भ प्रकार में दुकान कर रहे हैं Heap

5. पांचवें

आप उस वर्ग की कार्यक्षमता का उपयोग कर सकते हैं जैसे पार्सिंग स्ट्रिंग को इंटेगर, डबल इत्यादि में और इसके सहमति का उपयोग करें।

यहाँ कार्य करता है और Integer वर्ग

enter image description here

6. के लिए सहमति हैं छठी

आप Integer को क्रमानुसार सकता है, जबकि इसके साथ int

7. सातवीं संभव नहीं है

आप एक RMI पद्धति के रूप में Integer पारित कर सकते हैं, लेकिन एक ही साथ int

नोट संभव नहीं है: Integer वर्ग वे int में मूल्य की दुकान के अंदर वास्तव में RMI बहस में किसी अन्य वस्तु का हिस्सा दोनों Integer और int हो सकता है।

8. आठवीं

int की चर परिवर्तनशील है (यह final int के साथ ऐसा नहीं है), जबकि Integer अपरिवर्तनीय है। जब हम मूल्य बदलते हैं तो यह नई वस्तु पैदा करेगा।

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