जावा 1.5 के रूप में, आप काफी इंटरचेंज कर सकते हैं Integer
के साथ int
कई स्थितियों में।
हालांकि, मुझे अपने कोड में एक संभावित खराबी मिली जिसने मुझे थोड़ा आश्चर्यचकित किया।
निम्नलिखित कोड:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
मूल्यों के बराबर होने पर गलत तरीके से मिसमैच सेट करते हुए दिखाई दिए, हालाँकि मैं किन परिस्थितियों में निर्धारित नहीं कर सकता। मैंने एक्लिप्स में एक ब्रेकप्वाइंट सेट किया और देखा कि Integer
मान दोनों 137 थे, और मैंने बूलियन अभिव्यक्ति का निरीक्षण किया और यह कहा कि यह गलत था, लेकिन जब मैंने इस पर कदम रखा, तो यह सच में बेमेल था।
सशर्त को बदलना:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
समस्या को ठीक किया।
क्या कोई इस बारे में कुछ प्रकाश डाल सकता है कि ऐसा क्यों हुआ? अब तक, मैंने केवल अपने पीसी पर अपने लोकलहोस्ट के व्यवहार को देखा है। इस विशेष मामले में, कोड ने इसे सफलतापूर्वक लगभग 20 तुलनाओं के साथ बनाया, लेकिन 2 पर विफल रहा। समस्या लगातार प्रतिलिपि प्रस्तुत करने योग्य थी।
यदि यह एक प्रचलित समस्या है, तो यह हमारे अन्य वातावरणों (देव और परीक्षण) पर त्रुटियों का कारण होना चाहिए, लेकिन अभी तक, इस कोड को स्निपेट निष्पादित करने वाले सैकड़ों परीक्षणों के बाद किसी ने भी समस्या की सूचना नहीं दी है।
क्या यह अभी भी ==
दो Integer
मूल्यों की तुलना करने के लिए उपयोग करने के लिए वैध नहीं है ?
नीचे दिए गए सभी ठीक उत्तरों के अलावा, निम्नलिखित स्टैकओवरफ़्लो लिंक में बहुत अधिक अतिरिक्त जानकारी है। यह वास्तव में मेरे मूल प्रश्न का उत्तर दे सकता था, लेकिन क्योंकि मैंने अपने प्रश्न में ऑटोबॉक्सिंग का उल्लेख नहीं किया था, यह चयनित सुझावों में नहीं दिखा था:
कंपाइलर / जेवीएम सिर्फ ऑटोबॉक्सिंग को "सिर्फ काम" क्यों नहीं बना सकते?