Voy a responder a su pregunta con reservas, pero debe saber que se está perjudicando a sí mismo si la intención de la pregunta era hacer que aprendiera y su solución era pedir StackOverflow. Eso aparte ...
Este comportamiento es intencional.
El equals()
método predeterminado en java.lang.Object
compara direcciones de memoria, lo que significa que todos los objetos son diferentes uno de otro (sólo dos referencias al mismo objeto volverá true
).
java.lang.Integer
anulaciones esto para comparar el valor de los Integer
s, por lo que dos diferentes Integer
s ambos representan el número dos comparan iguales. Si usó ==
, obtendrá false
en ambos casos.
práctica estándar en Java es reemplazar el método equals
para volver true
para objetos que tienen el mismo valor lógico , incluso si se crearon en momentos diferentes (o incluso con diferentes parámetros). No es muy útil tener objetos que representen números si no tienes una manera de preguntar: "¿estas dos cosas representan el mismo valor?".
Dicho sea de paso, y esto es una tangente aquí, Java realmente mantiene un caché de objetos Integer
para valores pequeños. Por lo tanto, a veces puede obtener dos objetos Integer
donde incluso el operador ==
devolverá true
, a pesar de que los obtiene de dos fuentes diferentes. ¡Incluso puede obtener código que se comporte de manera diferente para enteros más grandes que para pequeños, sin tener que mirar los valores integrales!
@downovoter Veo que un votante desfavorecido está en pleno apogeo aquí. ¿Te importaría explicar tus votos? – dasblinkenlight
esto parece duplicado –