至于Person的定义:
public class Person {
private int id;
private int characteristics;
public boolean equals (Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof Person) {
if (id == ((Person) obj).id) {
return true;
} else if (characteristics == ((Person) obj).characteristics) {
return true;
}
}
return false;
}
}
导致2个Person
对象a
并且如果返回b
必须具有相同的哈希码,我应该如何实现该方法?a.equals(b)
true
hashCode
解决方案
equals
根据Java的等价协议,我的方法实现不正确:传递性不满足:a.id = 1
, a.characteristic = 2
, b.id = 1
, b.characteristic = 3
, c.id = 2
, c.characteristic = 3
; a.equals(b) == true
, b.equals(c) == true
, 但是a.equals(c) == false
。