consideran este código:comportamiento incoherente sobre los == de 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);
}
}
Imprime:
false
true
false
entiendo la primera false
, el operador == sólo comprueba si dos referencias están trabajando en el mismo objeto, que en este caso no lo son.
Los siguientes true
y false
me hacen rascar la cabeza. ¿Por qué Java consideraría i3
y i4
igual pero i1
y i2
diferente? Ambos han sido envueltos en Integer, ¿no deberían ambos evaluar como falsa? ¿Hay alguna razón práctica para esta inconsistencia?
Creo que FindBugs le dirá su error. –