Considerate questo codice:comportamento incoerente sul == di java
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);
}
}
Esso stampa:
false
true
false
Capisco la prima false
, l'operatore == solo controlli se due riferimenti stanno lavorando sullo stesso oggetto, che in questo caso non lo sono.
I seguenti numeri true
e false
mi graffiano la testa. Perché Java considera i3
e i4
uguali ma i1
e i2
diversi? Entrambi sono stati incapsulati su Integer, non valutare su false? C'è una ragione pratica per questa incoerenza?
Credo che FindBugs ti direbbe del tuo errore. –