【发布时间】:2011-08-14 22:45:02
【问题描述】:
我读到要在 java 中使用 equals() 方法,我们还必须重写 hashcode() 方法,并且相等(逻辑上)的对象应该具有相同的哈希码,但这并不意味着基于参考的平等!这是我重写的 equals() 方法的代码,我应该如何重写 hashcode 方法:
@Override
public boolean equals(Object o)
{
if (!(o instanceof dummy))
return false;
dummy p = (dummy) o;
return (p.getName() == this.getName() && p.getId() == this.getId() && p.getPassword() == this.getPassword());
}
我只是想了解它是如何工作的,所以只有三个字段,即 name , id 和 password ,只是尝试比较我在 main() 中定义的两个对象就是这样!我还需要知道是否总是需要重写 hashcode() 方法和 equals() 方法?
【问题讨论】:
-
记住'return 1;'是 'hashcode();' 的完全合法的实现这通常总结了您可以信任和不信任的内容:)
-
小心!您的部分 p.getName() == this.getName() 和 p.getPassword() == this.getPassword() 不正确(假设它们是字符串或非原语)。您应该使用 p.getName().equals(this.getName()) 和 p.getPassword().equals(this.getPassword())。您还应该添加空检查以访问这两个字段。
标签: java object methods overriding