सामान्य रूप से जावा में समानता ऑपरेटर एक तथाकथित उथले तुलना करता है। दूसरे शब्दों में यह वैरिएबल वाले मानों की तुलना करता है। अब आदिम डेटा प्रकारों के चर में मूल्य होता है जबकि संदर्भ प्रकारों में ढेर क्षेत्र का संदर्भ होता है जो वास्तविक सामग्री को संग्रहीत करता है। इसका मतलब है कि आपके कोड स्निपेट int b
में मूल्य 1
और Integer a
होगा, ढेर पर वास्तविक इंटीजर ऑब्जेक्ट का मेमोरी पता होगा।
अब आपके द्वारा प्रदान किए गए विशेष उदाहरण में एक pecularity है। इंटीजर क्लास एक विशेष रैपर वर्ग जो प्राचीन पूर्णांक प्रकारों को लपेटता है। कंपाइलर स्वचालित रूप से ऐसे रैपर ऑब्जेक्ट्स और आदिम प्रकारों (जिसे मुक्केबाजी और अनबॉक्सिंग कहा जाता है) के बीच परिवर्तित कर सकते हैं।
चलिए आपको चरणबद्ध कदम से कोड चरण चलते हैं।
Integer a = 1;
संकलक वास्तव में निम्न कोड इस लाइन के insted substitue:
Integer a = Integer.valueOf(1);
स्थिर विधि valueOf
एक आवरण वस्तु दृष्टान्त प्रदान किए हैं कि आदिम मूल्य लपेटता देता है। यह प्रक्रिया जब संकलक एक प्राचीन प्रकार से एक रैपर वर्ग बनाता है उसे मुक्केबाजी कहा जाता है।
इस तरह के एक आवरण वस्तु का उपयोग करते समय समानता ऑपरेटर
a == b
संकलक वास्तव में निम्नलिखित के लिए यह परिवर्तन का उपयोग कर एक आदिम चर के साथ के साथ तुलना में है:
a.intValue() == b;
जहां intValue
रिटर्न आदिम मूल्य लिपटे रैपर ऑब्जेक्ट (जिसे अनबॉक्सिंग कहा जाता है) द्वारा यानी यह आदिम मूल्य को अनबॉक्स करता है और अभिव्यक्ति को दो प्राइमेटिव की तुलना करने के बराबर बनाता है। यही कारण है कि समानता ऑपरेटर true
[इस प्रश्न] [http://stackoverflow.com/q/20877086) के उत्तरों पर नज़र डालें, जो निकट से संबंधित है। आप [ऑटो-अनबॉक्सिंग] (http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html) पर भी पढ़ना चाहेंगे, जिसका उपयोग आपके द्वारा उद्धृत कोड में किया जाएगा। –
http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – ha9u63ar
संभावित डुप्लिकेट [जब आदिम और बॉक्स किए गए मान के लिए == का उपयोग करते समय, ऑटोबॉक्सिंग किया जाता है, या अनबॉक्सिंग किया जाता है] (http : //stackoverflow.com/questions/30454635/when-using-for-a-primitive-and-a-boxed-value-is-autoboxing-done-or-is-unbox) – davidwebster48