Dúvida MasterExam

Bom dia,

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.

[]s
Gunnar