यह भी काम करता है ("मेरे मशीन पर"):
Integer a = 128, b = 128;
इस जबकि काम नहीं करेगा:
Integer a = 127, b = 127;
स्वत: मुक्केबाजी एक int
Integer.valueOf(int)
के लिए एक कॉल के लिए वाक्यात्मक चीनी है। यह फ़ंक्शन -128 से 127 तक मूल्यों के लिए कैश का उपयोग करता है। यह अन्य मूल्यों को कैश कर सकता है, लेकिन मेरे मामले में, यह नहीं है।
इस प्रकार, 128 के असाइनमेंट में कैश हिट नहीं है; यह प्रत्येक ऑटो-मुक्केबाजी ऑपरेशन के साथ एक नया Integer
उदाहरण बनाता है, और संदर्भ तुलना a != b
सत्य है। 127 के असाइनमेंट में कैश हिट है, और परिणामी Integer
ऑब्जेक्ट्स वास्तव में कैश से एक ही उदाहरण हैं। तो, संदर्भ तुलना a != b
गलत है।
मैं वास्तव में क्या इंगित करना चाहता हूं ऑटो-मुक्केबाजी के साथ संदर्भ तुलना से सावधान रहना है। एक और संभावित वास्तविक दुनिया की समस्या यह है कि आप a == b
की उम्मीद करते हैं क्योंकि उन्हें एक ही (ऑटो-बॉक्सिंग) मान दिया गया था, आप कुछ यूनिट परीक्षण चलाते हैं जो आपकी अपेक्षा की पुष्टि करते हैं, और फिर आपका कोड "जंगली में" विफल रहता है जब कुछ काउंटर कैश की ऊपरी सीमा से अधिक है। मनोरंजन समय!
मैं कहां हूं? .... – Kasturi
@ डीजेक्लेवर्थ "" || "संस्करण से आपका क्या मतलब है? –
@ एलन, बहुत अच्छा सवाल +1 – ELAYARAJA