一、重写equals()方法的原则
对称性:
如果x.equals(y)
返回是“true”,那么y.equals(x)
也应该返回是 “true”。
自反性:
x.equals(x)
必须返回是“true”。
传递性:
如果x.equalsly)
返回是“true”,而且y.equals(z)
返回是“true”,那么z.equals(x)
也应该返回是“true”。
一致性:
如果x.equals(y)
返回是“true”,只要x和y内容一直不变,不管重复x.equals(y)
多少次,返回结果都是“true”。
二、事例代码
1、创建Person类并重写equals方法
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person person = (Person) obj;
return name.equalsIgnoreCase(person.getName().trim());
}
return false;
}
}
2、创建SubPerson类并继承Person
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class SubPerson extends Person {
private Integer id;
public SubPerson(Integer id, String name) {
super(name);
this.id = id;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Person){
Person e = (Person)obj;
return super.equals(e);
}
return super.equals(obj);
}
}
3、测试
Person p1 = new Person("tom");
SubPerson p2 = new SubPerson(1, "tom");
SubPerson p3 = new SubPerson(2, "tom");
System.out.println(p1.equals(p1)); // true 自反性
System.out.println(p1.equals(p2)); // true 对称型
System.out.println(p2.equals(p1)); // true
System.out.println(p1.equals(p3)); // true // 传递性
System.out.println(p3.equals(p2)); // true