Java中的hashcode与equals方法

两者都能对比两个对象是否相等一致,重写的equals一般比较的全面复杂,效率低一点,而hashCode()只生产一个hash值比较,效率比较高,但并不完全可靠,可行的方法是先用hashCode比较,如果hashCode不一样,对象肯定不相等,不用再比较了。如果hashCode一样,再用equals()比较,如果equals()一样,对象就真的相同了。保证equals返回true时,hashCode返回相同int值,所以重写equals方法必然要重写hashCode()方法。
通常类方法的的equals方法重写需要逐个比较对象各个字段,hashCode方法可以重用Object中的hashCode方法,以下是重写示例:

public class User {
    private String name;
    private int age;
    private String passport;
 
    //getters and setters, constructor
 
    @Override
    public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof User)) {
            return false;
        }
        User user = (User) o;
        return age == user.age &&
                Objects.equals(name, user.name) &&
                Objects.equals(passport, user.passport);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(name, age, passport);
    }

你可能感兴趣的:(Java中的hashcode与equals方法)