在Java中比较对象是否相等时出错,通常是因为没有正确地重写equals()
和hashCode()
方法。这两个方法是Java中用于比较对象是否相等的关键方法。
equals()
方法比较的是对象的引用,即两个对象的内存地址是否相同。HashMap
、HashSet
)中用于快速查找对象。如果一个类没有重写equals()
和hashCode()
方法,那么默认情况下,两个对象只有在内存地址相同时才被认为是相等的。这在很多情况下是不合理的,比如我们希望比较的是对象的内容而不是引用。
Objects.hash()
方法来简化计算。import java.util.Objects;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
HashMap
、HashSet
等集合类时,需要正确重写equals()
和hashCode()
方法,以确保对象能够正确地被查找和比较。通过正确重写equals()
和hashCode()
方法,可以确保对象在逻辑上的相等性得到正确的处理,避免在比较对象时出现错误。
领取专属 10元无门槛券
手把手带您无忧上云