Elementos iguais (equals devolve true) devem ter hashCodes iguais.
Como o equals que foi implementado compara os campos age e name, o hashCode deve resultar também desses dois campos para que se verifique a afirmação anterior.
rmala_ti
Hum…
Mas o que ocorreria se o hashCode fosse implementado como na letra c?
Tchello
O que ele quis dizer é que como no equals foi considerado apenas age e name, o hashCode também deve seguir essa lógica, uma vez que pela lógica podemos supor que age e name são campos obrigatórios e sempre existirão para um objeto do tipo Person, já comment não, devendo ser desconsiderado tanto no equals quanto no hashCode, uma vez que pode não existir nessas instâncias (objetos).
rmala_ti
Acho que a palavra appropriate define a resposta.
Acredito que todos sejam válidos mas apropriado é a letra b pois equals e hashCode atuam sobre as mesmas variáveis de instância.
Isso eu entendi, mas qual o efeito para a localização de um objeto que tem o hashCode utlizando as variáveis de instância diferentes de equals?
Este objeto será localizado?
Grato.
Gustavo.foa
O hashcode está diretamente ligado ao equals, então o método equals considera iguais os objetos que tem age e name iguais, desconsiderando comments. Então o hashcode também na pode “depender” do atributo comments. senão objetos que podem ter age e name iguais mas comments diferente não teriam hashcode iguais, mas o equals retornaria true e isso é contra a regra do hashcode que diz: “Se o método equals retorna true, o método hashCode deve ter o mesmo valor para os dois objetos e o contrário não é necessário.”
equals == true => hashCode DEVE ter o mesmo número
hashCode iguais, não necessáriamente equals é true.
hashCode diferentes, equals nunca retornará true.
O appropriate é porque a letra “a” também atende a regra, mas é mais apropriado vc restringir mais o hashCode, de “preferencia” utilizando todas as variáveis utilizadas no equals.
Espero ter ajudado.
Abraço!
rmala_ti
Gustavo.foa:
O hashcode está diretamente ligado ao equals, então o método equals considera iguais os objetos que tem age e name iguais, desconsiderando comments. Então o hashcode também na pode “depender” do atributo comments. senão objetos que podem ter age e name iguais mas comments diferente não teriam hashcode iguais, mas o equals retornaria true e isso é contra a regra do hashcode que diz: “Se o método equals retorna true, o método hashCode deve ter o mesmo valor para os dois objetos e o contrário não é necessário.”
equals == true => hashCode DEVE ter o mesmo número
hashCode iguais, não necessáriamente equals é true.
hashCode diferentes, equals nunca retornará true.
O appropriate é porque a letra “a” também atende a regra, mas é mais apropriado vc restringir mais o hashCode, de “preferencia” utilizando todas as variáveis utilizadas no equals.