【发布时间】:2022-01-14 16:32:20
【问题描述】:
我目前正在尝试学习如何正确覆盖 equals() 和 HashCode() 方法。 我知道如果我想覆盖 equals(),最好覆盖 HashCode(),这就是我目前正在做的事情。我目前使用的类是我自己的名为 Product 的类,带有一个名为 id 的 int 对象变量,如果它们的 id 相同,则此类的两个对象是相等的。 这就是我的 equals 目前的样子:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product that = (Product) o;
return id == that.id;
}
现在我有一个 equals 方法,它只比较类中的一个变量,我应该如何覆盖 HashCode() 方法? IntelliJ 建议这样做,这似乎有点过于简单:
@Override
public int hashCode() {
return id;
}
它还为我提供了使用 Java 7+ 功能的选项,这将为我提供:
@Override
public int hashCode() {
return Objects.hash(id);
}
这两种方法中的任何一种是覆盖 HashCode 的可行方法吗?如果两者都是,在什么情况下使用哪个更好?
【问题讨论】:
-
两者都可以。我更喜欢简单的,我自己。
-
你想多了。返回 id 就可以了。
-
我很久以前写过这个作为覆盖 hashCode 的通用解决方案:sourceforge.net/p/tus/code/HEAD/tree/tjacobs/util/…
标签: java oop hash equals hashcode