Prueba de igualdad (método de código igual y hash)

Según el siguiente enlace

Hashcode e igual

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

Respuestas a la pregunta(5)

Su respuesta a la pregunta