[अद्यतन]new Integer(int)
का उपयोग करना हमेशा एक नई वस्तु में परिणाम की Integer.valueOf(int)
मूल्यों का संचय हो पाता है जबकि संकलक, वर्ग पुस्तकालय, या JVM द्वारा किया जाना गारंटी है।
व्याख्या करने के लिए मैंने कोड नीचे लिखा है और javap
उपकरण का उपयोग किया है, नीचे कोड उत्पन्न करने के लिए आदेश मैंने javap -c <Classname>
का उपयोग किया है जो आपको बाइट कोड देता है।
Integer x = new Integer(0), y;
y=x;
x+=0;
System.out.println(x==y); // prints false
आप उपरोक्त कोड में देखेंगे अगर यह गतिशील स्मृति allocator जो new
है साथ नई वस्तु बनाता है। अब नीचे के रूप में दूसरे मामले में:
Integer x = 0, y;
y=x;
x+=0;
System.out.println(x==y); // prints true
पीटर के कहे अनुसार यह valueOf
विधि है जिसका अर्थ है कि यह रन समय में एक ही वस्तु तुलना कर रहा है तो यह वस्तु तुलना ऑपरेटर (==
) के साथ true
वापस आ जाएगी उपयोग करता है।
मुझे आशा है कि इस मदद करता है: लेकिन पहले मामले में यह नई वस्तु है जिसके नीचे डिबगिंग स्नैपशॉट में विशिष्ट है बनाने था। :)
जिस तरह से केविन एशे उत्तर भी सवाल में जोड़ता है। चूंकि यह मूल रूप से कैश किए गए ऑब्जेक्ट का संदर्भ दे रहा है, String
के मामले में इसे जोड़ने का प्रयास करें। यदि आप new String("some_string")
का उपयोग कर रहे हैं तो यह उपलब्ध होने पर नई ऑब्जेक्ट अन्य बना देगा, यह string pool
से उपयोग करेगा। और याद रखें कि आप रैपर वर्गों का उपयोग आदिम नहीं कर रहे हैं।
नहीं, क्योंकि '-128 - 127' की सीमा में 'इंटीजर' कैश हो रही है। आपके पहले उदाहरण में आप एक नया 'इंटेगर' बनाने की व्याख्या कर रहे हैं, इस तथ्य के बावजूद कि '-128 - 127' की सीमा में प्रत्येक 'इंटीजर' एक ही ऑब्जेक्ट को संदर्भित करेगा। – SomeJavaGuy
अन्य उत्तरों के बावजूद -128 - 127 मतभेद नहीं है, यह सिर्फ जेवीएम की एक विशेषता है, जिसे '-Djava.lang.Integer.IntegerCache.high' संपत्ति' के साथ कुछ संस्करणों पर tweaked किया जा सकता है, और डिफ़ॉल्ट मान नाटकीय रूप से भिन्न हो सकते हैं JVM के लिए JVM, ** आपको इस व्यवहार पर कभी भरोसा नहीं करना चाहिए! ** http: // stackoverflow देखें।कॉम/प्रश्न/15052216/कैसे-बड़े-द-द-इंटीजर-कैश –