我遇到了一个关于平等和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