Prueba de igualdad (método de código igual y hash)
Según el siguiente enlace
or lo tanto, se supone que si 2 objetos son iguales (es decir, igual () devuelve verdadero), entonces sus códigos hash () deben devolver el mismo valor.
Pero considere el siguiente ejemplo
public class Test {
public static void main(String args[]) {
Demo d1 = new Demo(123);
Demo d2 = new Demo(123);
System.out.println("d1.hashCode()-->" + d1.hashCode());
System.out.println("d2.hashCode()-->" + d2.hashCode());
System.out.println(d1.equals(d2));
}
}
class Demo {
private int name;
Demo(int name) {
this.name = name;
}
@Override
public int hashCode() {
Double d = Math.random() * 1000;
return d.intValue();
}
@Override
public boolean equals(Object o) {
if ((o instanceof Demo) && (((Demo) o).getName() == this.getName())) {
return true;
} else {
return false;
}
}
public int getName() {
return name;
}
}
la salida del programa anterior es
d1.hashCode () -> 85
d2.hashCode () -> 692
ciert
Aquí la pregunta es que aunque el código hash es diferente, el método igual devuelve verdadero. Entonces, ¿significa que para la igualdad de objetos no necesitamos el mismo código hash