重写equals方法为什么一定要重新hashcode,还有麻烦举个例子说明
时间: 2023-10-29 17:05:45 浏览: 84
为什么在重写 equals方法的同时必须重写 hashcode方法
重写equals方法一定要重新hashCode方法是因为在Java中,如果两个对象使用equals方法比较相等,那么它们的hashCode值也必须相等。否则,当这两个对象被放入基于哈希表的集合类中(例如HashMap,HashSet等)时,它们会被认为是不同的对象,这会导致哈希表的不正确使用。
举个例子,假设我们有一个Person类,它有两个属性:name和age。我们希望两个Person对象在name和age都相等时被认为是相等的。我们可以这样重写equals方法:
```java
public boolean equals(Object obj) {
if (obj == null) return false;
if (!(obj instanceof Person)) return false;
Person other = (Person) obj;
return Objects.equals(name, other.name) && age == other.age;
}
```
但是,如果我们不重写hashCode方法,那么这个类的两个实例在放入HashMap中时,会被认为是不同的对象。因此,我们需要重写hashCode方法:
```java
public int hashCode() {
return Objects.hash(name, age);
}
```
这样,当我们把两个Person对象放入HashMap时,它们会被认为是相同的对象,因为它们的hashCode值相等。
阅读全文