我遇到了一個關於平等和hashCode合同問題: 這裏是等於和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 = 1 0,bal = 100,rate = 10
然後在D中使用equals()
方法,我們得到A.equals(B)
求值爲true
對不對?但是,他們得到一個不同的hashCode,因爲他們有不同的餘額?是不是我誤解了這個概念?有人能爲我澄清這一點嗎?
感謝您的幫助,我想我明白了。 是的,我正在使用該書來研究scjp,並從考試模擬器中獲得了這個問題。 – y62wang 2010-08-05 06:35:32
您也可以在Josh Bloch的Effective Java第二版中閱讀本主題。非常好的解釋! – 2010-08-05 06:44:00
<3有效的java ... – atamanroman 2010-08-05 06:46:29