根据以下链接
所以假设如果2个对象相等(即equals()返回true),那么它们的hashCodes()必须返回相同的值。
但是考虑下面的例子public class Test {
public static void main(String args[]) {
Demo d1 = new Demo(123);
Demo d2 = new Demo(123);
System.out.println("d1.hashCode()-->" + d1.hashCode());
System.out.println("d2.hashCode()-->" + d2.hashCode());
System.out.println(d1.equals(d2));
}
}
class Demo {
private int name;
Demo(int name) {
this.name = name;
}
@Override
public int hashCode() {
Double d = Math.random() * 1000;
return d.intValue();
}
@Override
public boolean equals(Object o) {
if ((o instanceof Demo) && (((Demo) o).getName() == this.getName())) {
return true;
} else {
return false;
}
}
public int getName() {
return name;
}
}
上述程序的输出是d1.hashCode()-->85
d2.hashCode()-->692
真正
这里的问题是,即使哈希码不同,equals方法也会返回true.所以这是否意味着对于对象的平等,我们不需要相同的哈希码。