इस कोड पर विचार करें:जावा का == पर असंगत व्यवहार
class test {
public static void main(String[] args) {
test inst_test = new test();
int i1 = 2000;
int i2 = 2000;
int i3 = 2;
int i4 = 2;
Integer Ithree = new Integer(2); // 1
Integer Ifour = new Integer(2); // 2
System.out.println(Ithree == Ifour);
inst_test.method(i3 , i4);
inst_test.method(i1 , i2);
}
public void method(Integer i , Integer eye) {
System.out.println(i == eye);
}
}
यह प्रिंट:
false
true
false
मैं समझता हूँ कि पहले false
, == ऑपरेटर केवल चेक के दो संदर्भों अगर एक ही काम कर रहे हैं वस्तु, जो इस मामले में नहीं हैं।
निम्नलिखित true
और false
मुझे मेरे सिर खरोंच है। जावा i3
और i4
बराबर क्यों मानेंगे लेकिन i1
और i2
अलग-अलग होंगे? दोनों को इंटीजर में लपेटा गया है, दोनों को झूठा मूल्यांकन नहीं करना चाहिए? क्या इस असंगतता के लिए कोई व्यावहारिक कारण है?
मेरा मानना है कि FindBugs अपने त्रुटि की आपको बता जाएगा। –