जब जावा == ऑपरेटर आदिम प्रकार के अलावा और कुछ तुलना करने के लिए प्रयोग किया जाता है, यह निर्देशात्मक समानता के लिए जाँच करता है; यह तब भी लागू होता है जब चीजों की तुलना की जा रही चीजें primitives लपेटा जाता है। इसके अलावा, valueOf
विधि और कंपाइलर-जेनरेट किए गए ऑटोबॉक्सिंग कथन आम तौर पर एक नई वस्तु को वापस करने के लिए स्वतंत्र होते हैं जो किसी अन्य पूर्व-मौजूदा संदर्भ के संदर्भ में नहीं होगा, या किसी मौजूदा ऑब्जेक्ट का संदर्भ वापस करने के लिए (जो निश्चित रूप से होगा , एक ही वस्तु की पहचान करने वाले किसी भी पूर्व-मौजूदा संदर्भ के संदर्भ-संदर्भ के बराबर हो)। कार्यान्वयन एक मूल्यों के लिए Integer
उदाहरणों में से "पूल" बनाए रखने के लिए आवश्यक हैं 127 तक -128, ऐसा है कि उस सीमा के भीतर किसी विशेष नंबर पर Integer.valueOf
के लिए सभी कॉल एक ही वस्तु के लिए संदर्भ वापस आ जाएगी, पर इसके अलावा एक कार्यान्वयन के लिए स्वतंत्र होगा अन्य जैसे
static Integer [] intPool = new Integer[256];
public Integer valueOf(int n)
{
int hash = (n*0x18675309) >>> 24;
Integer instance = intPool[n];
if (instance == null && instance.value != n)
{
instance = new Integer(n);
intPool[hash] = instance ;
}
return instance;
}
कुछ मैं विशेष रूप से जावा कार्यान्वयन, ऐसा कुछ करने के लिए के बाद से कई मामलों में "कैश हिट" अनुपात 0% के पास हो सकता है और अतिरिक्त समय कैश में उदाहरणों की तलाश में खर्च की उम्मीद नहीं है कर बर्बाद हो जाएगा। फिर भी, वहाँ किसी भी गारंटी नहीं है कि एक संदर्भ instanceOf
द्वारा वापस कुछ पिछले संदर्भ कि विधि द्वारा लौटाए से मेल नहीं खाएगी कभी नहीं है (भले ही पिछले संदर्भ कि विधि द्वारा लौटाए से मेल नहीं खाता, कुछ कैशिंग एल्गोरिदम संभवतः यह करने के लिए कारण हो सकता है एक पहले संदर्भ लौटने पर ताला लगा। लॉकिंग की कमी कोड और कुछ वापस जाने के लिए सही मान के साथ एक पूर्णांक के लिए एक संदर्भ से कारण कभी नहीं होगा बिना खासकर अगर पूल से अधिक थ्रेड द्वारा साझा किया जाता है, लेकिन जो में अप्रत्याशित बदलाव के कारण हो सकता है वापस संदर्भ बराबर तुलना करें)। कन्स्ट्रक्टर new Integer(n)
का उपयोग करके सीधे बनाए गए Integer
ऑब्जेक्ट्स का संदर्भ केवल अद्वितीय होने की गारंटी है; कोड जो valueOf
द्वारा दिए गए किसी भी संदर्भ से मेल खाने के लिए valueOf
द्वारा लौटाए गए किसी भी संदर्भ की अपेक्षा करता है, वास्तव में यह नहीं देखा गया कि यह मेल नहीं खाता है, इसे तोड़ दिया जाना चाहिए।
मुझे लगता है कि इस लिंक आप मदद कर सकते हैं: //stackoverflow.com/questions/1514910/when-comparing-two-integers-in-java-does-auto-unboxing-occur – Tarik
http://stackoverflow.com/questions/5277881/why-arent-integers- की डुप्लीकेट कैश्ड-इन-जावा – Patrick
और यह: http://stackoverflow.com/questions/5117132/int ईगर-रैपर-ऑब्जेक्ट्स-शेयर-द-ए-इंस्टेंस-केवल-इन-द-वैल्यू-127, http://stackoverflow.com/questions/8427416/why-is-true-for-some-integer-objects – Patrick