2012-06-15 24 views

उत्तर

41

एक आदिम प्रकार केवल डेटा है। दूसरी ओर, हम ऑब्जेक्ट्स को कॉल करते हैं, केवल पॉइंटर्स हैं जहां डेटा संग्रहीत किया जाता है। उदाहरण के लिए:

Integer object = new Integer(3); 
int number = 3; 

इस मामले में, object एक पूर्णांक वस्तु जिसका मूल्य 3. यही कारण है कि स्मृति स्थान है जहाँ चर वस्तु संग्रहीत किया जाता है पर है, होता है करने के लिए सिर्फ एक सूचक है, तुम सब है एक संदर्भ है जहां डेटा वास्तव में है। स्मृति स्थिति जहां number संग्रहीत है, दूसरी तरफ, मूल्य 3 सीधे है।

तो, आप object को शून्य पर सेट कर सकते हैं, लेकिन इसका मतलब यह होगा कि उस ऑब्जेक्ट का डेटा शून्य में है (यानी असाइन नहीं किया गया है)। आप एक int को शून्य करने के लिए सेट नहीं कर सकते हैं, क्योंकि भाषा उस मान के रूप में व्याख्या करेगी।

आशा है कि मदद करता है!

+0

मुझे लगता है कि जावा 8 ने वैकल्पिक प्राइमेटिव्स जैसे वैकल्पिक INT को पेश किया है, भले ही ये सर्वोत्तम प्रथाएं सच हों? OptionalInt.empty() को शून्य मान के स्थान पर उपयोग किया जा सकता है। लेकिन मेरी समझ वैकल्पिक है कि विधियों के प्रकारों को वापस किया जाना चाहिए, और गुणों के लिए प्रकार नहीं होना चाहिए। – tmn

5

क्योंकि भाषा मानक कहता है।

यदि आप null पास करने में सक्षम होना चाहते हैं, तो आपको the wrapper types का उपयोग करना चाहिए, उदा। Integerint के बजाय।

3

क्योंकि यह एक आदिम प्रकार है और कोई वस्तु नहीं है। यदि आप शून्य मानों का उपयोग करने की क्षमता की आवश्यकता है (यानी डबल के लिए डबल, लंबे समय तक डबल, बूलियन के लिए बूलियन इत्यादि)

8

क्योंकि जावा में आदिम डेटा प्रकार Object एस नहीं हैं । आप Object रखने के लिए हमेशा एक रैपर कक्षाओं का उपयोग कर सकते हैं। आठ आदिम डेटा प्रकार का हर उसके संगत आवरण है:

  • बाइट: java.lang.Byte
  • कम: java.lang.Short
  • पूर्णांक: java.lang.Integer
  • लंबे: java.lang.Long
  • फ्लोट: java.lang.Float
  • डबल: java.lang.Double
  • बूलियन: java.lang.Boolean
  • चार java.lang.Character

आप पूरी संरचना में रुचि रखते हैं, तो आप here (Primitive Data Types) शुरू कर सकते हैं।

13

क्योंकि शून्य एक संदर्भ है। और आदिम प्रकार संदर्भ प्रकार नहीं हैं। केवल वस्तुओं संदर्भ प्रकार हैं।

1

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

1

सभी उपर्युक्त उत्तर के साथ मैं भी इस बिंदु को जोड़ना चाहता हूं।

आदिम प्रकारों के लिए, हमने माप के लिए स्मृति आकार निर्धारित किया है यानी हमारे पास 4 बाइट हैं और चार में हमारे पास 2 बाइट हैं। और नल केवल वस्तुओं के लिए उपयोग किया जाता है क्योंकि स्मृति आकार तय नहीं होता है।

डिफ़ॉल्ट हमारे पास से

तो,

int a=0; 

और

int a=null; 

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

2

ऑब्जेक्ट्स में प्राइमेटिव्स की तुलना में अधिक ओवरहेड शामिल है। निम्नलिखित परीक्षण से पता चलता है कि int इंटीजर से लगभग 10x तेज करता है।

int n; 
EtmPoint point1 = etmMonitor.createPoint("test:objects"); 
for (n = 0; n < 1000000; n++) { 
    Integer t = 0; 
    t = 10; 
    t = 11; 
} 

point1.collect(); 
EtmPoint point = etmMonitor.createPoint("test:primitives"); 
for (n = 0; n < 1000000; n++) { 
    int t = 0; 
    t = 10; 
    t = 11; 
} 
point.collect(); 

etmMonitor.render(new SimpleTextRenderer()); 

यही कारण है कि .net नल पुरातन लागू किया, दुर्भाग्य से जावा नल पुरातन नहीं है।

+0

और यह सवाल के लिए बिल्कुल कारण है। .NET ने इस उम्र पहले लागू किया था, और दुर्भाग्यवश, जावा इस संबंध में पीछे है। – Shane

1

सबसे पहले, आदिम और ऑब्जेक्ट रेफरेंस का अंतर प्राथमिक वैरिएबल स्टोर वास्तविक मान है, जबकि ऑब्जेक्ट रेफरेंस वैरिएबल उस ऑब्जेक्ट का पता संग्रहीत करता है जिसे ऑब्जेक्ट संदर्भ में संदर्भित किया गया है, यदि कोई पता नहीं है तो "शून्य" पास हो जाएगा।

आदिम डेटा प्रकार का डिफ़ॉल्ट मान आदिम डेटा प्रकार पर निर्भर करता है: जैसे बाइट = 0, शॉर्ट = 0, int = 0, long = 0L, float = 0.0f, double = 0.0d, boolean = false, char = "\ u0000"।

जब हम किसी भी वर्ग प्रकार के चर को घोषित करते हैं, तो इसे संदर्भ डेटा प्रकार के रूप में जाना जाता है।

पूर्व:

टेस्ट t1

टेस्ट t2

(वस्तु आवरण प्रकार)

पूर्णांक मैं

लांग एल

वस्तु संदर्भ मूलभूत मूल्यों, JVM initializes संदर्भ चर के रूप में "शून्य" और होगा सरणी को "शून्य"