equals 比较两个对象

直接看代码

先说明一点,两个对象之间的比较,若果没有重写equals方法,则默认会调用Object中的equals()


@Getter
@Setter
public class User {
    private String username;
    private String password;

    /*@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return Objects.equals(getUsername(), user.getUsername()) &&
                Objects.equals(getPassword(), user.getPassword());
    }*/

  /*  @Override
    public int hashCode() {
        return Objects.hash(getUsername(), getPassword());
    }*/
}
  Object o = new Object();
        User user = new User();

        User user1 = new User();

        //如果不重写equals方法,默认调用Object的equals方法,则比较两个对象的引用,显然new了两个对象,他们的引用当然不同,所以结果是
        //false
        System.out.println(user.equals(user1));

输出的比较结果为false
下面代码为Object中的代码,很显然比较的是两个对象的引用,new两个不同的对象,引用当然不一样

  public boolean equals(Object obj) {
        return (this == obj);
    }

然后User类重写equals方法

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return Objects.equals(getUsername(), user.getUsername()) &&
                Objects.equals(getPassword(), user.getPassword());
    }

解读一下
首先判断两个对象的引用是否相同,显然不同,往下走,判断两个对象是否为同一类型,相同,往下走,最后判断两个对象的属性是否相同,注意&&,所有属性都相同,则对象相同!两个对象属性都没有值,相同,所以最终结果为true