在阅读 equals() 和 hashcode() 时,我开始知道如果两个对象相等,那么它们的哈希码必须相等,反之亦然。
但下面的例子并没有反映这一点。
class Employee{
private String name;
Employee(String name){
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
现在,如果我创建两个 Employee 对象作为
Employee e1 = new Employee("hi");
Employee e2 = new Employee("hi");
如果我这样做,即使它们的哈希码不同e1.equals(e2)
,它也会返回truee1.hashcode()
,这从打印中可以看出,并且e2.hashcode()
.
有人可以解释一下吗?