यहां बताया गया है कि मैं इसके बारे में क्या सोचना पसंद करता हूं। एक 32 बिट पूर्णांक युक्त एक चर के कार्यान्वयन पर विचार करें। जब किसी मान प्रकार के रूप में माना जाता है, तो संपूर्ण मान 32 बिट स्टोरेज में फिट बैठता है। वैल्यू टाइप यह है कि: स्टोरेज में केवल बिट्स होते हैं जो मूल्य बनाते हैं, और कुछ भी नहीं, कम कुछ भी नहीं।
अब किसी ऑब्जेक्ट संदर्भ वाले चर के कार्यान्वयन पर विचार करें। चर में एक "संदर्भ" होता है, जिसे किसी भी तरीके से कार्यान्वित किया जा सकता है। यह एक कचरा कलेक्टर संरचना में एक संभाल हो सकता है, या यह प्रबंधित ढेर, या जो भी हो, पर एक पता हो सकता है। लेकिन यह ऐसा कुछ है जो आपको ऑब्जेक्ट खोजने की अनुमति देता है। संदर्भ संदर्भ यह है कि: संदर्भ प्रकार के चर के साथ जुड़े भंडारण में कुछ बिट्स हैं जो आपको किसी ऑब्जेक्ट को संदर्भित करने की अनुमति देती हैं।
स्पष्ट रूप से उन दो चीजें पूरी तरह से अलग हैं।
अब मान लीजिए कि आपके पास प्रकार ऑब्जेक्ट का एक चर है, और आप उस प्रकार के चर के प्रकार की प्रतिलिपि बनाना चाहते हैं। आप इसे कैसे करते हो? 32 बिट्स जो एक पूर्णांक बनाते हैं वे इन "संदर्भ" चीजों में से एक नहीं हैं, यह केवल एक बाल्टी है जिसमें 32 बिट्स हैं। संदर्भ प्रबंधित ढेर में 64 बिट पॉइंटर्स हो सकते हैं, या कचरा कलेक्टर डेटा संरचना में 32 बिट हैंडल हो सकते हैं, या किसी अन्य कार्यान्वयन के बारे में आप सोच सकते हैं, लेकिन 32 बिट पूर्णांक केवल 32 बिट पूर्णांक हो सकता है।
तो आप उस परिदृश्य में क्या करते हैं, आप पूर्णांक बॉक्स करते हैं: आप एक नई वस्तु बनाते हैं जिसमें पूर्णांक के लिए भंडारण होता है, और फिर आप नई वस्तु का संदर्भ संग्रहीत करते हैं।
बॉक्सिंग केवल तभी जरूरी है जब आप (1) एक एकीकृत प्रकार प्रणाली चाहते हैं, और (2) सुनिश्चित करें कि 32 बिट पूर्णांक 32 बिट्स मेमोरी का उपभोग करता है। यदि आप उनमें से किसी को अस्वीकार करने के इच्छुक हैं तो आपको मुक्केबाजी की आवश्यकता नहीं है; हम उनको अस्वीकार करने के लिए तैयार नहीं हैं, और इसलिए मुक्केबाजी वह है जिसे हम साथ रहने के लिए मजबूर हैं।
स्रोत
2009-12-30 07:32:05
+1 आपको +1 क्योंकि आप इसे मुझसे बेहतर समझते हैं .. –
धन्यवाद मेहदद! इससे मेरा संदेह साफ हो गया! :) –
अच्छा जवाब। यद्यपि इसके साथ छोटी मामूली समस्याएं। सबसे पहले, ढेर बनाम ढेर मुक्केबाजी के लिए अप्रासंगिक है; मूल्य प्रकारों को ढेर पर नहीं होना चाहिए, और वे ढेर पर होने पर भी बॉक्स किए गए हैं। दूसरा, वर्चुअल विधियां अप्रासंगिक हैं; संरचना पर वर्चुअल विधि भेजने के लिए मुक्केबाजी की आवश्यकता नहीं है! चूंकि सभी structs मुहरबंद हैं, जिटर के पास पर्याप्त समय से यह निर्धारित करने के लिए पर्याप्त जानकारी है कि जिट समय पर कौन सी विधि कहा जाता है। –