निम्नलिखित कोड वास्तव में मुझे भ्रमित कर रहा था क्योंकि यह दो अलग-अलग आउटपुट प्रदान करता था। कोड जेडीके 1.7 पर परीक्षण किया गया था।कैसे! = और == ऑपरेटर जावा में इंटीग्रर्स पर काम करते हैं?
public class NotEq {
public static void main(String[] args) {
ver1();
System.out.println();
ver2();
}
public static void ver1() {
Integer a = 128;
Integer b = 128;
if (a == b) {
System.out.println("Equal Object");
}
if (a != b) {
System.out.println("Different objects");
}
if (a.equals(b)) {
System.out.println("Meaningfully equal.");
}
}
public static void ver2() {
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2) {
System.out.println("Equal Object");
}
if (i1 != i2){
System.out.println("Different objects");
}
if (i1.equals(i2)){
System.out.println("Meaningfully equal");
}
}
}
आउटपुट:
[ver1 उत्पादन]
विभिन्न वस्तुओं
सार्थक बराबर।[उत्पादन ver2]
समान वस्तु
सार्थक बराबर
क्यों == और! = परीक्षण ver1() और एक ही नंबर पूर्णांक से बहुत कम के लिए ver2() के लिए अलग-अलग परिणाम पैदा करता है। अधिकतम मूल्य? क्या यह निष्कर्ष निकाला जा सकता है कि == 127 से अधिक संख्याओं की जांच (कोड में दिखाए गए इंटीजर जैसे रैपर वर्गों के लिए) पूरी तरह बर्बाद है?
ऐसा इसलिए है क्योंकि ऑटोबॉक्सिंग तंत्र कैश -128 - 127 में मानों के लिए उसी ऑब्जेक्ट को कैश करता है और पुन: उपयोग करता है। यह पिछले प्रश्न का डुप्लिकेट है। – aioobe
@quixoto: मेरी संपादन प्रतिक्रिया देखें :) – BoltClock
http://stackoverflow.com/questions/1700081/why-does-128-128-return-false-but-127-127-return-true-when-converting-to -integ –