重写Object类的equals方法

Object类的equals方法默认比较的是两个对象的地址值,没有意义

所以我们需要重写equals方法,比较两个对象的属性值(name,age)

会隐含着一个多态

会有一个弊端:无法使用子类特有的内容(属性,方法)

使用向下转型可以进行解决

    @Override
    public boolean equals(Object o) {
        //使用向下转型(强转)把Object类转换为person
        Person p = (Person) o;
        //比较两个对象的属性;一个是调用方法的this(p1),一个就是p(obj=p2)
        boolean b = this.name.equals(p.name) && this.age==p.age;
        return b;
    }
public class Equals {
    public static void main(String[] args) {
        Person p1 = new Person("张三",18);
        Person p2 = new Person("李四",18);
        boolean equals = p1.equals(p2);
        System.out.println(equals);
    }
}

public class Equals {
    public static void main(String[] args) {
        Person p1 = new Person("张三",18);
        Person p2 = new Person("张三",18);
//        Person p2 = new Person("李四",18);
        boolean equals = p1.equals(p2);
        System.out.println(equals);
    }
}

 

 

 添加一个判断防止类型转换异常

 

 

 添加一个判断,如果传递的参数o是null,直接返回false,提高程序的效率

 

在添加一个判断,传递参数o是this本身,直接返回true,可以提供效率

 

也可以直接快捷键生成

 

 

equals方法如果传递null会抛出空指针异常

public class Equals {
    public static void main(String[] args) {
        String s1 = null;
        String s2 = "abc";
        boolean equals = s1.equals(s2);
        System.out.println(equals);
    }
}

 

 

 可以使用Objects这个类进行使用

Objects的equals方法:对两个对象进行比较,防止空指针异常

boolean b1 = Objects.equals(s1, s2);
System.out.println(b1);

 

 

 

posted @ 2022-07-04 11:46  魔光领域  阅读(138)  评论(0编辑  收藏  举报