equals と hashCode のコントラクトについて質問があります。
与えられた:
class SortOf {
String name;
int bal;
String code;
short rate;
public int hashCode() {
return (code.length() * bal);
}
public boolean equals(Object o) {
// insert code here
}
}
次のうち、このクラスの equals() および hashCode() コントラクトを満たすのはどれですか? (該当するものをすべて選択してください。)
正解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;
最後の選択肢 D について質問があります。
A: code.length=10、bal=10、rate=100
B: code.length=10、bal=100、rate=10
次にequals()
、D のメソッドを使用して、正しいA.equals(B)
評価を取得します。true
しかし、残高が異なるため、異なるhashCodeを取得しますか? どこかでコンセプトを誤解したのでしょうか?誰かが私のためにこれを明確にすることができますか?