Modificando o método equals()
na classe Estudante()
para somente olhar o número de matrícula (um int
) ao comparar 2 estudantes, o retorno é false
quando não sobrescrevo o hashCode()
e true
quando sobrescrevo, mesmo quando o hash code é somente do nome do estudante, que é um atributo diferente do número:
@Override
public boolean equals(Object obj) {
Estudante outroEstudante = (Estudante) obj;
return this.numeroDeMatricula == outroEstudante.numeroDeMatricula;
}
@Override
public int hashCode() {
return this.nome.hashCode();
}
Entendo que quando o hashCode()
não é sobrescrito, mesmo que 2 objetos tenham os mesmos atributos, o hash code é diferente. Porém não entendi por que ele ainda é considerado para definir se 2 objetos são iguais quando o critério no equals()
sobrescrito não o leva em conta (no caso, são comparados primitivos, que não usam o método equals()
da classe Object
, por isso deduzi que não é usado o método hashCode()
, e por extensão um hash code, para compará-los).