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