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).