equals()方法的重写案例
为什么要重写equals()
正常情况下,equals比较的是引用数据类型,例如对象,默认情况写equals比较的是两个对象的内存地址;但是有些情况下我们需要比较我们自定义的对象,我们不希望去比较内存地址,仅仅只看两个对象中的属性是否一样就够了,所以我们需要去重写equals(),来实现我们的需求。
重写案例
//先写一个Person类
public class Person {
int age;
String name;
char gender;
String adress;
//重载构造方法,初始化对象
public Person(String name,int age,char gender,String adress){
this.name=name;
this.age=age;
this.gender=gender;
this.adress=adress;
}
//重写equals方法,此处重写是IDEA自动帮我们写好的,不过不建议这样去判断class,作为参考
/** @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 && gender == person.gender && name.equals(person.name) && Objects.equals(adress, person.adress);
}
}*/
//自己写的equals,此处使用Objects的equals方法可以替我们省去判空操作
Person p=(Person) o;
if (p instanceof Person ){
boolean result= Objects.equals(this.name,p.name)&&Objects.equals(this.age,p.age)&&Objects.equals(this.adress,p.adress)&&Objects.equals(this.gender,p.gender);
return result;
}else
return false;
测试
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person("wangyunfei",18,'男',"河南省");
Person p2=new Person("wangyunfei",18,'女',"河南省");
boolean equals = p1.equals(p2);
System.out.println(equals);
}
}
//输出
D:\jdk1.8.0_131\bin\java.exe
true
Process finished with exit code 0