इंटर्नल रेफरेंस के लिए एक इंटर्न शाब्दिक का प्रत्यक्ष असाइनमेंट ऑटो-बॉक्सिंग का एक उदाहरण है, जहां ऑब्जेक्ट कन्वर्जन कोड के लिए शाब्दिक मूल्य संकलक द्वारा नियंत्रित किया जाता है।
इसलिए संकलन चरण के दौरान संकलक में परिवर्तित हो Integer a = 1000, b = 1000;
जाता है Integer a = Integer.valueOf(1000), b = Integer.valueOf(1000);
।
तो यह वह Integer.valueOf()
विधि है जो वास्तव में हमें पूर्णांक वस्तुएं प्रदान करती है, और यदि हम Integer.valueOf()
विधि के स्रोत कोड को देखते हैं, तो हम स्पष्ट रूप से -128 में 127 (समावेशी) में विधि पूर्णांक वस्तुओं को देख सकते हैं।
/**
*
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
इसलिए नई पूर्णांक वस्तुओं को बनाने और वापस करने के बजाय, Integer.valueOf()
विधि आंतरिक से आंतरिक वस्तुओं को लौटाती है IntegerCache
यदि पारित इंट शाब्दिक -128 से अधिक और 127 से कम है।
जावा इन पूर्णांक वस्तुओं को कैश करता है क्योंकि पूर्णांकों की इस श्रेणी का उपयोग दिन प्रतिदिन की प्रोग्रामिंग में बहुत अधिक हो जाता है जो अप्रत्यक्ष रूप से कुछ मेमोरी को बचाता है।
स्टैटिक ब्लॉक की वजह से क्लास को मेमोरी में लोड होने पर कैश को पहले इस्तेमाल पर शुरू किया जाता है। कैश की अधिकतम सीमा को -XX:AutoBoxCacheMax
जेवीएम विकल्प द्वारा नियंत्रित किया जा सकता है।
पूर्णांक वस्तुओं के लिए ही, Integer.IntegerCache हम भी करने के लिए इसी तरह की यह कैशिंग व्यवहार लागू नहीं है ByteCache, ShortCache, LongCache, CharacterCache
के लिए Byte, Short, Long, Character
क्रमशः।
आप मेरे लेख Java Integer Cache - Why Integer.valueOf (127) == Integer.valueOf (127) इज़ ट्रू पर अधिक पढ़ सकते हैं ।