Comprenda completamente por qué necesita sobrecargar el método equals() y por qué necesita sobrecargar el método hashCode().
Tanto el método igual como el método hashCode son métodos en la clase de objeto, echemos un vistazo a su código fuente:
Como puedes ver, el método igual se llama dentro de " ==", es decir, sin sobrecargar el método igual, el método igual compara si los dos objetos tienen la misma referencia, es decir, si apuntan a la misma dirección de memoria.
Y hashCode es un método local que devuelve la dirección de memoria del objeto.
Ahora que sabemos esto, sigamos adelante.
Generalización de hashCode:
De las tres reglas anteriores, se puede ver que sobrecargar el método igual sin sobrecargar el método hashCode viola la segunda regla. Los objetos iguales deben tener códigos hash iguales.
A continuación, usaré un programa para demostrar las terribles consecuencias de no sobrecargar el método hashCode:
Es fácil ver eso para el primer resultado de salida, lo cual es cierto, porque nosotros El método igual se ha sobrecargado y devolverá el mismo valor siempre que los atributos de nombre de los dos objetos sean los mismos. Pero, ¿por qué el segundo resultado es falso? Porque no sobrecargamos el método hashCode. Entonces concluimos: si una clase sobrecarga el método igual pero no sobrecarga el método hashCode, entonces la clase no podrá funcionar correctamente con todas las colecciones basadas en hash (HashMap, HashSet).
Entonces, ¿cómo solucionamos este problema? Es fácil, simplemente anule el método hashCode.
Después de la modificación, ingrese lo siguiente: