Duvida questão 3 cap 7 Kathy Sierra SCJP

6 respostas
AUser

Olá galera,

Estava dando um olhada em uma questão e fiquei com uma dúvida. Para mim seria a letra A, B, D.

  1. Quais as declarações abaixo são verdadeiras com relação à comparação de duas instâncias da mesma classe, dado que os métodos equals() e hashcode() foram apropriadamente sobrescritos?

A. Se o metodo equals retornar true, o operador == de comparação de hashcode pode retornar true.
B. Se o método equas retornar falsze, o operador == de comparação de hashcode pode retornar true.
C. Se o operador == de comparação de hasCode() retornar true, o método equals deve retornar true.
D. Se o operador == de comparaão de hascode retornar true, o método equals pode retornar true.
E. Se o operador != de comparação de hascode() retornar true, o método equals pode retornar true.

Mas no gabarito está apenas a letra B,D. No meu conhecimento, sobre a letra A deveria ser DEVE ao invés de PODE. No entanto o autor marca a letra A como falsa pois não segue o contrato de hashCode.

Alguém pode me explicar porque a letra A está errada?

Grato.

6 Respostas

B

Pode, não. Deve!
:slight_smile:

AUser

No entanto, a letra D considerada correta pelo autor também sofreria essa mesma correção de “DEVE” ao invés de pode. No entanto considera a mesma correta.

B

Lembre-se que através do hashcode você só é capaz de dizer se um objeto é DIFERENTE de outro.

Se o hashcode de dois objetos forem distintos, você pode AFIRMAR que esses objetos não são iguais.
Porém mesmo se dois objetos possuírem hashcodes iguais, você não pode AFIRMAR nunca que esses objetos são iguais.

Portanto na letra A, a palavra “pode” não se aplica. Na letra D, é sim possível as duas possibilidades.

AUser

Sim,

Mas e porquê a letra A está como incorreta? Apenas por causa do PODE ao invés do DEVE?

[]'s

M

Aparentemente sim.

a.equals(b) // se isso é TRUE
a.hashCode() == b.hashCode() // DEVE retorna TRUE

Como ele disse que “pode retornar true” está errado… Porque não pode!

B

AUser:
Sim,

Mas e porquê a letra A está como incorreta? Apenas por causa do PODE ao invés do DEVE?

[]'s

Cara, quando você usa a palavra “pode”, você dá margens para interpretações dúbias, ou seja, quando na letra A está sendo dito “o operador == de comparação de hashcode PODE retornar true”, quer dizer que PODE retornar, não tornando tal fato obrigatório, portanto abrindo a possibilidade de poder retornar FALSE dependendo da ocasião. O que não é verdade pra esse caso, que DEVE SEMPRE retornar TRUE.

A letra D vai pelo mesmo caminho.

Acostume-se com esse tipo de questão nos exames. Várias delas usam esse esquema do “MUST” / “COULD”. Você deve ficar atendo e saber que VAI encontrar questões com essa conotação na prova.

Criado 22 de junho de 2009
Ultima resposta 23 de jun. de 2009
Respostas 6
Participantes 3