"चूंकि डेवलपर्स कक्षाओं के साथ आ सकते हैं जो संख्याओं का वर्णन करते हैं, उन्होंने वास्तविक डेवलपर्स की तरह रचनात्मक होने का फैसला किया।"

"सबसे पहले, वे एक सार संख्या वर्ग के साथ आए, जिसमें से बाइट, शॉर्ट, इंटेगर, लॉन्ग, फ्लोट और डबल व्युत्पन्न हुए हैं। इसमें ऐसी विधियाँ हैं जो संख्याओं को अन्य संख्यात्मक प्रकारों में बदलने में मदद करती हैं।"

संख्या वर्ग के तरीके
1
int intValue()
2
long longValue()
3
float floatValue()
4
double doubleValue()
5
byte byteValue()
6
short shortValue()

"ठीक है। आखिरकार, आप यह नहीं लिख सकते:"

Long x = 100000;
Integer y = (Integer) x;

"हाँ, ये प्रकार आदिम नहीं हैं। इसलिए हम संख्या वर्ग के तरीकों का उपयोग करते हैं:"

Long x = 100000;
Integer y = x.intValue();

"लेकिन अभी भी कुछ बातों पर विचार करना बाकी है। क्योंकि इंटेगर एक इंट नहीं है, इंटेगर ऑब्जेक्ट्स की क्लासिक «==» ऑपरेटर के साथ तुलना नहीं की जा सकती है।"

आदिम प्रकारों की तुलना करना
int x = 500;
int y = 500;
x == y; //true
गैर-आदिम प्रकारों की तुलना करना
Integer x = 500;
Integer y = 500;
x == y; //false
x.equals(y); //true

"बिल्कुल सही। किसी तरह मैंने अभी इसके बारे में नहीं सोचा।"

"लेकिन वहाँ और भी है।"

"आप मेरे सर्किट को छोटा कर रहे हैं! और क्या है?"

"जब हम एक पूर्णांक चर के लिए एक अंतर मान निर्दिष्ट करते हैं, तो Integer.valueOf विधि कहलाती है:"

कोड वास्तव में क्या होता है
Integer x = 5;
Integer x = Integer.valueOf(5);

"हाँ, मैं इसे ऊपर के उदाहरण से पहले ही समझ गया हूँ।"

"लेकिन, valueOf फ़ंक्शन हमेशा एक नया पूर्णांक ऑब्जेक्ट नहीं बनाता है।"

"उह, तुम्हारा क्या मतलब है «हमेशा नहीं»?"

"यह -128 से 127 तक मानों को कैश करता है।"

कोड वास्तव में क्या होता है विवरण
Integer x = 300;
Integer y = 300;
Integer z = 300;
Integer x = Integer.valueOf(300);
Integer y = Integer.valueOf(300);
Integer z = Integer.valueOf(300);
चर x, y और z में विभिन्न वस्तुओं के संदर्भ होते हैं
Integer x = 100;
Integer y = 100;
Integer z = 100;
Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
Integer z = Integer.valueOf(100);
चर x, y और z में एक ही वस्तु के संदर्भ होते हैं।
Integer x = new Integer(10)
Integer y = new Integer(10)
Integer z = 10;
Integer t = 10;
Integer x = new Integer(10)
Integer y = new Integer(10)
Integer z = Integer.valueOf(10);
Integer t = Integer.valueOf(10);
चर z और t में एक ही वस्तु के संदर्भ होते हैं।

"दूसरे शब्दों में, स्थिति यह है:"

1)  यदि हम "नया पूर्णांक ()" लिखते हैं, तो हमें एक नई वस्तु प्राप्त करने की गारंटी है।

2)  अगर हम स्पष्ट रूप से या ऑटोबॉक्सिंग के माध्यम से Integer.valueOf() कहते हैं, तो विधि एक नई वस्तु या कैश्ड ऑब्जेक्ट वापस कर सकती है यदि संख्या तर्क -128 से 127 की सीमा में है।

"कैश से ऑब्जेक्ट वापस करने की विधि के बारे में इतना भयानक क्या है?"

"कोई बात नहीं। आपको केवल यह जानने की आवश्यकता है कि कभी-कभी, जब आप इसकी अपेक्षा नहीं कर रहे होते हैं, वस्तुएं समान हो सकती हैं। समानता के साथ सब कुछ जटिल है। यदि हम एक आदिम की तुलना एक गैर-आदिम से करते हैं, तो उनकी तुलना आदिम के रूप में की जाती है:"

तुलना समस्या
int x = 300;
Integer y = 300;
Integer z = 300;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //false (comparison based on references)
एक और भी दिलचस्प उदाहरण। कैश यहाँ तस्वीर में प्रवेश करती है
int x = 100;
Integer y = 100;
Integer z = 100;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //true (comparison based on references; they point to the same object)
लेकिन कैश यहां शामिल नहीं है
int x = 100;
Integer y = new Integer(100);
Integer z = 100;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //false (comparison based on references; they point to different objects)

"बहुत बढ़िया... और मैं यह सब कैसे याद रखूँगी?"

"आपको इसे याद रखने की आवश्यकता नहीं है। आपको केवल यह समझने की आवश्यकता है कि यह सब कैसे व्यवस्थित है और वास्तव में क्या होता है जब एक आदिम और इसके गैर-आदिम समकक्ष खेल में आते हैं।"

"मैं यह भी अनुशंसा करता हूं कि आप पूर्णांक वर्ग के तरीकों को देखें। इसमें कुछ अच्छे और उपयोगी तरीके हैं। आपने उनमें से एक का भी अक्सर उपयोग किया है।"

"हाँ, मुझे याद है। Integer.parseInt ();"