public class Person {
private String name, comment;
private int age;
public Person(String n, int a, String c) {
name = n; age = a; comment = c;
}
public boolean equals(Object o){
if (! (o instanceof Person)) return false;
Person p = (Person)o;
return age == p.age && name.equals(p.name);
}
}
What is the appropriated definition o the hashCode method in class Person?
A. return super.hashCode();
B. return super.hashCode() + age * 7;
C. return super.hashCode() + comment.hashCode() / 2;
D. return super.hashCode() + comment.hashCode() / 2 - age * 3;
Answer: B
Para mim, todas estão erradas… Não entendi por que a B está correta. Alguém sabe me explicar?
e ai java player blz?
Então a questão b está correta pq para objetos iguais o hash code tbm deve ser igual mas para objetos diferentes o hash code pode ser igual ou não…
no exemplo acima objetos iguais (idade e nome) ou com a mesma idade e nome diferente terão o mesmo hash code. Por isso a B é válida.
Espero te ajudado falowww
[quote=rodolfoliviero]e ai java player blz?
Então a questão b está correta pq para objetos iguais o hash code tbm deve ser igual mas para objetos diferentes o hash code pode ser igual ou não…
no exemplo acima objetos iguais (idade e nome) ou com a mesma idade e nome diferente terão o mesmo hash code. Por isso a B é válida.
Espero te ajudado falowww[/quote]
Mas o super.hashCode() vai acessar o hashCode() da classe Object, que é baseado na posição do objeto na memória, não?
Ou seja, mesmo que dois objetos Pessoa tenham os atributos age e name iguais, o super.hashCode() deles pode ser diferente.
Você copiou a questão do TestKiller errada (ou no teu TestKiller está errado). No TestKiller que eu tenho ta assim:
A. return super.hashCode();
B. return name.hashCode() + age * 7;
C. return name.hashCode() + comment.hashCode() /2;
D. return name.hashCode() + comment.hashCode() / 2 - age * 3;
Sendo assim, a B acessa o hashCode() da String name e não do objeto. Como o equals “usa” o age e o name para verificar igualdade, um hashCode do name e o age*7 serve como um hashCode válido.
O Testkiller que eu peguei são 2 PDFs. Essa questão era do PDF que tem questões de Drag & Drop junto. Agora vi que essa questão tem no outro PDF também, e no outro tá certo.