Pessoal, criei este post somente porque não encontrei resposta pra minha dúvida em nenhum outro lugar.
Tenho o seguinte código:
public class Simulador {
public static void main(String[] args) {
Foo foo1 = new Foo("a");
Foo foo2 = new Foo("a");
HashSet<Foo> set = new HashSet<Foo>();
set.add(foo1);
set.add(foo2);
for (Foo foo : set) {
System.out.println(foo.equals(foo1));
System.out.println(foo.equals(foo2));
}
}
}
class Foo {
public String str;
public Foo(String a) {
str = a;
}
@Override
public boolean equals(Object o) {
return str.equals(((Foo) o).str);
}
@Override
public int hashCode() {
return Calendar.getInstance().get(Calendar.SECOND);
}
}
Eis que ao executar ele exibe na saída: true true
Porém se eu depurar o código linha por linha, ele exibe: true true true true
Ainda não entendi o que ocorre “por trás das câmeras” do Hashcode. Alguém pode me explicar como ele realmente funciona, por exemplo no meu código acima?
Sei que se o método equals retorna true, o hashcode deve retornar o mesmo inteiro. Porém eu implementei de uma forma que isso não ocorra. Qual o impacto?