Estou com dúvida quanto a questão abaixo.
Não entendi porque a letra D está correta também.
A letra C ok, agora a letra D?
Aguém poderia dar uma mão?
public class SortOf {
String name;
int bal;
String code;
short rate;
public int hashCode(){
return (code.length() * bal);
}
public boolean equals(Object o){
//code here
}
}
/*
Which of the following will fulfill the equals() and hashCode() contracts for this class?
A - return ((SortOf)o).bal == this.bal;
B - return ((SortOf)o).code.length() == this.code.length();
C - return ((SortOf)o).code.length() * ((SortOf)o).bal == this.code.length() * this.bal;
D - return ((SortOf)o).code.length() * ((SortOf)o).bal * ((SortOf)o).rate == this.code.length() * this.bal * this.rate;
===========
Explanation
===========
C and D are correct.
The equals() algorithm must be at least as precise in defining what "meaningfully equivallent"
means as the hashCode() method is.
*/
Não entendi qual foi sua dúvida aqui. O motivo pelo qual a letra D é correta segue a mesma lógica do motivo que a C é, se um objeto do tipo SortOf tiver os atributos bal, code e rate iguais aos do outro, então os dois objetos são considerados iguais.
Não entendi porque esta alternativa é considerada correta, uma vez que a variável “rate” não é utilizada na definição do hashCode()
Foi por isso que não entendi…
public int hashCode(){
return (code.length() * bal);
}
[quote=diegobrandao][quote]
Não entendi qual foi sua dúvida aqui. O motivo pelo qual a letra D é correta segue a mesma lógica do motivo que a C é, se um objeto do tipo SortOf tiver os atributos bal, code e rate iguais aos do outro, então os dois objetos são considerados iguais.
[/quote]
Não entendi porque esta alternativa é considerada correta, uma vez que a variável “rate” não é utilizada na definição do hashCode()
Foi por isso que não entendi…
public int hashCode(){
return (code.length() * bal);
}
[/quote]
mas se vc multiplicar os dois lados de uma expressão por uma mesma constante, os valores tem que continuar sendo iguais.