hashCodeメソッドとequalsメソッド
JavaのhashCodeメソッドとequalsメソッドは以下のような条件を満たしてないといけません。
Condition | Required | Not Required(But Allowed) |
---|---|---|
x.equals(y) == true | x.hashCode() == y.hashCode() | |
x.hashCode() == y.hashCode() | x.equals(y) == true | |
x.equals(y) == false | x.hashCode() == y.hashCode() | |
x.hashCode() != y.hashCode() | x.equals(y) == false |
いまSJC-PをJava6で取得するためにSCJP Sun Certified Programmer for Java 6 Study Guideを読んで勉強しているのですが、以下のような問題がありました。
class SortOf { String name; int bal; String code; short rate; public int hashCode() { return (code.length() * bal); } public boolean equals(Object o) { //ここにコードを挿入する } } 以下のどれを挿入すると、このクラスにおけるequals()とhashCode()の契約を満たすでしょうか? A: return ((SortOf)o).bal == this.bal; B: return ((SortOf)o).code.length() == this.code.lenth(); C: return ((SortOf)o).code.length() * ((SortOf)o).bal == this.code.lenth() * this.bal; D: return ((SortOf)o).code.length() * ((SortOf)o).bal * ((SortOf)o).rate == this.code.length() * this.bal * this.rate;
CとDが正解となっていました。
Cが正解なのは分かりますが、Dが正解なのが分かりませんでした。JavaRaunchのページによると、本が間違っていることが分かりました。