我遇到了一个关于 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;
丁:
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,因为他们有不同的余额?是不是我在某个地方误解了这个概念?有人可以为我澄清一下吗?