Meu bom, me deparei com sua dúvida faz alguns dias… E o que posso te dizer é que esta recomendação está ligada à manipulação de objetos em Collections como Map, HashMap, etc… Porque há um número de operações possíveis na hora de inserir ou buscar um objeto num Collection que pode fazer uso tanto do hashCode quanto do equals, portanto é recomendável que ao sobreescrever o equals que também se sobres-escreva o hashCode, de forma a manter um consistente com o outro.
No mais, Tudo de Bueno e Carpe Diem!
[color=“darkblue”][/color]
…voce vai ter uma dor de cabeca! Fazendo dessa forma, voce nao esta sobrescrevendo o metodo equals(Object), voce esta sobrecarregando “equals” e criando um novo metodo equals(Usuario)!
[quote]só que na API fala que geralmente tenho de sobrescrever hashCode qd equals tbm é sobrescrito… nao entendi o porque…
[/quote]
o motivo é que o equals() nao será chamado se o hashcode() nao estiver bem implementado
o hashcode() é que informa qual a posição do objeto na tabela hash. Entao somente depois que tiver a posição o método equals() será chamado, fazendo a devida comparação.
Portanto se o hashcode() retornar um endereço errado, nao adianta implementar o equals() :!:
o motivo é que o equals() nao será chamado se o hashcode() nao estiver bem implementado
o hashcode() é que informa qual a posição do objeto na tabela hash. Entao somente depois que tiver a posição o método equals() será chamado, fazendo a devida comparação.
Portanto se o hashcode() retornar um endereço errado, nao adianta implementar o equals() :!:[/quote]
Vlws moçada entendi… mas surgiu novas duvidas aqui
Como sou muito sortudo eu vou ter que mexer HashMap… hehe…
mas sei q da pra eu evitar esse transtorno… mas só por curiosidade alguem tem noção como posso fazer minha implementação do hashCode()… acho q já fiz algumas simples para tabelas pequenas…(usando mod). Mas deve ser bem mais complexos para tabelas grandes né… alguma sugestão ou alguns exemplos???
:arrow: outra coisa, fiquei na duvida aqui
na API fala
[quote] this method returns true if and only if x and y refer to the same object (x == y has the value true).
[/quote]
antes achava que equals era pra ver se tem o msm conteudo… e não se duas referencia aponta pro msm objeto em memória… estava eu errado?