a comparación de dobles en Java da resultados extraño
Realmente no puedo entender por qué sucede lo siguiente:
Double d = 0.0;
System.out.println(d == 0); // is true
System.out.println(d.equals(0)); // is false ?!
Sin embargo, esto funciona como se esperaba:
Double d = 0.0;
System.out.println(d == 0.0); // true
System.out.println(d.equals(0.0)); // true
Estoy seguro de que esto está relacionado con el autoboxing de alguna manera, pero realmente no sépor qué0
estaría en una caja diferente cuando==
operador se utiliza y cuando.equals
se llam.
¿No viola esto implícitamente laequals
contrato @
* It is reflexive: for any non-null reference value * x, x.equals(x) should return * true.
EDITA:
Gracias por las respuestas rápidas. Pensé que está encuadrado de manera diferente, la verdadera pregunta es:por qu ¿está en caja diferente? Quiero decir que esto sería más intuitivo sid == 0d
qued.equals(0d)
es intuitivo y esperado, sin embargo sid == 0
que parece unaInteger
estrue
que 'intuitivamente'd.equals(0)
también debería ser cierto.