2011-03-12 20 views
6

जावा में मूल प्रकार के ऑब्जेक्ट, इंटीजर और आदिम संस्करण, int दोनों हैं।जावा आदिम कार्यान्वयन

आदिम संस्करण तेज/हल्का/आदि हैं। तो सामान्य रूप से आप उनका उपयोग करना चाहिए।

मैं क्या सोच रहा हूं कि जावा के डिजाइनरों में न केवल ऑब्जेक्ट प्रकार होते हैं और दृश्यों के पीछे अनुकूलन के रूप में आदिम संस्करणों का उपयोग करते हैं।

तो:

Integer foo(Integer alpha) 
{ 
    Integer total = 0; 
    for(Integer counter = 0; counter < alpha; counter++) 
    { 
     total += counter; 
    } 
    return total; 
} 

की तरह कोड कुछ में संकलित किया जाएगा:

int foo(int alpha) 
{ 
    int total = 0; 
    for(int counter = 0; counter < alpha; counter++) 
    { 
     total += counter; 
    } 
    return total; 
} 

अनिवार्य रूप से, इस काल्पनिक जावा संकलक बराबर आदिम प्रकार में पूर्णांक, डबल, फ्लोट, आदि के उदाहरण में बदल सकते हैं । केवल उन मामलों में जहां वस्तुओं की वास्तव में आवश्यकता थी (तत्व को एक कंटेनर में डालने के लिए कहें) वास्तविक इंटीजर ऑब्जेक्ट्स शामिल होंगे।

नोट: उपरोक्त कोड ने इंटेगर ऑब्जेक्ट्स पर ऑपरेटरों का उपयोग किया है जो मुझे पता है कि वास्तव में अनुमति नहीं है। चूंकि मैं काल्पनिक जावा कंपाइलर्स का आविष्कार कर रहा हूं, इसलिए मैं दिखाऊंगा कि इस में स्ट्रिंग के लिए इंटीजर/फ्लोट/डबल के लिए विशेष आवरण है।

+1

सटीक डुप्लिकेट नहीं , लेकिन मैं http://stackoverflow.com/questions/5199359/why-do-people-still-use-primitive-types-in-java – corsiKa

+0

@glowcoder में बहुत सारी जानकारी को कवर करता हूं, मुझे वह सब पता है। लेकिन मैं सोच रहा हूं कि जावा ने दृश्यों के पीछे यह सब करने से रोक दिया होगा और हमें इसके बारे में चिंता न करें। यही है, हमें प्रदर्शन चिंताओं की आवश्यकता नहीं है, क्योंकि यह लंबे समय तक लंबे समय तक लंबे समय तक उपयोगों को परिवर्तित करने के लिए संकलक के लिए सरल लगता है। –

+1

एक बड़ी समस्या यह है कि आपका उदाहरण केवल सरल है। मुझे बहुत खुशी है कि जावा के प्राइमेटिव हैं; वे सीधे हार्डवेयर पर मैप करते हैं और मैंने उन्हें कभी बाधा के रूप में नहीं देखा। अत्यधिक भागने विश्लेषण उपकरण के लिए पूछना सिर्फ इतना पूछ रहा है। इंटीजर की कल्पना करें [], आपको लगता है कि ऑप्टिमाइज़ करना कितना आसान होगा, इसका विश्लेषण करने से बचें और उसी कोड को int [] (बीसाइड्स जो इंटीजर शून्य हो सकता है) उत्पन्न करें। मोरेलसो इंटीजर अपरिवर्तनीय है और इसमें एक अंतिम क्षेत्र है जो कुछ अनुकूलन को रोकता है और इसके लिए और भी विश्लेषण की आवश्यकता होती है। – bestsss

उत्तर

0

आपको संकलक को सिग्नल करने के लिए कुछ तरीका चाहिए कि आप बॉक्स किए गए संस्करण को चाहते हैं, है ना? अन्यथा, यह कैसे पता चलेगा कि आप उस संस्करण को चाहते थे जिसमें गुण या आदिम संस्करण हैं? क्या होता है जब आप को Integer.MAX_VALUE का मूल्यांकन करने वाली विधि में पास करते हैं?

+0

Integer.MAX_VALUE इंटीजर वर्ग पर एक स्थिर स्थिरांक है। किसी एक को पकड़ने के लिए वास्तविक इंटीजर ऑब्जेक्ट के बारे में चिंता करने की आवश्यकता नहीं है। जब भी आपको वास्तव में एक इंटीजर ऑब्जेक्ट की आवश्यकता होती है, तो आप इसे ऑटोबॉक्स करेंगे। –

5

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

जावा डिज़ाइन निर्णयों के पीछे कारणों को समझने के लिए, आपको ऐतिहासिक संदर्भ को समझने की आवश्यकता है जिसमें उन्हें बनाया गया था।

आदिम प्रकारों और संदर्भ प्रकारों के बीच मजबूत भेद भाषा डिजाइन पूर्व जेडीके 1.0 में बेक किया गया था। JDK 1.5 करने से पहले, कि सभी था है: यदि आप संग्रह में (उदाहरण के लिए) पूर्णांकों रखना चाहते थे, आप स्पष्ट रूप से इस्तेमाल किया Integer.valueOf(int) आदि

ऑटो-मुक्केबाजी/ऑटो unboxing JDK 1.5 में प्रकार प्रणाली को जोड़ा गया है , इसे एक तरह से किया जाना था जो पिछड़ा संगत था। वे जो भी साथ आए थे वह एक अच्छा समझौता है ... लेकिन अगर वे क्लीन शीट से शुरू कर चुके थे तो वे क्या हासिल नहीं कर पाएंगे।

(और कारण यह है कि उन्होंने पहली बार "इसे सही नहीं किया"/नहीं किया था ... 1 99 0 के दशक की शुरुआत में वापस मूल भाषा के दायरे और समय के दबाव के साथ होने के कारण संभवतः पहली रिलीज प्राप्त करें। अगर उन्होंने इसे सही करने की कोशिश कर रहे अतिरिक्त महीनों/वर्षों खर्च किए हैं, तो संभावना है कि परियोजना मारे जायेगी ... या मार्केटिंग विंडो बंद हो गई होगी।)

+0

+1 - क्योंकि संदर्भ राजा है, हालांकि मुझे पूरा यकीन है कि भाषा डिजाइनर यह जान लेंगे कि यह कैसे करें। शुद्ध ऑब्जेक्ट भाषाएं हैं जो जावा के बाद प्री-डेट करती हैं; मेरे अनुभव से शुद्ध ओओ से अधिकांश विचलन सी से आने वाले लोगों के लिए जीवन आसान बनाने के लिए पेश किए गए थे। – CurtainDog