重写Object类的equals方法以及Objects类的equals方法

重写Object类的equals方法

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

所以要重写equals方法,比较两个对象的属性值,如果对象的属性值相同则返回true,否则返回false。

复制代码
public class Person {
    private String name;
    private int age;

//    @Override
//    public String toString() {
//        return "Person{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                '}';
//    }


    @Override
    public boolean equals(Object o) {
        //增加一个判断,是Person类型的再转换,
        if (o instanceof Person){
       //使用向下转型(强转),把object类型转换为Person
            Person p = (Person) o;
            boolean b = this.name.equals(p.name) && this.age == p.age;
            return b;
        }
        return false;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
复制代码
    public static void main(String[] args) {
        Person person = new Person("张三",20);
        Person person1 = new Person("张三", 20);  boolean b = person.equals(person1);
        System.out.println(b);
    }

 运行结果:

 

 

 

 

 

因为引用数据类型的默认值为null,如果我们使用equals传递的是null

    public static void main(String[] args) {
        Person person = new Person("张三",20);
        Person person1 = new Person("张三", 20);
//        boolean b = person.equals(person1);
        boolean b = person.equals(null);
        System.out.println(b);
    }

我们可以在equals中添加判断传递的值是否为空

复制代码
@Override
    public boolean equals(Object o) {
        if (o==null){
            return false;
        }
        //增加一个判断,是Person类型的再转换,
        if (o instanceof Person){
            //使用向下转型(强转),把object类型转换为Person
            Person p = (Person) o;
            boolean b = this.name.equals(p.name) && this.age == p.age;
            return b;
        }
        return false;
    }
复制代码

如果传递的值为空那么就可以直接返回false,不需要进行下面的语句,提高了程序的执行效率

 

 

如果我们使用equals传递的是对象本身,那么就不要执行强转的if判断,可以直接返回true

复制代码
@Override
    public boolean equals(Object o) {
        //如果传递的值时对象本身
        if (o==this){
            return true;
        }
        //如果传递的值为null
        if (o==null){
            return false;
        }
        //增加一个判断,是Person类型的再转换,
        if (o instanceof Person){
            //使用向下转型(强转),把object类型转换为Person
            Person p = (Person) o;
            boolean b = this.name.equals(p.name) && this.age == p.age;
            return b;
        }
        return false;
    }
复制代码

 

 

 

 

Objects类的equals方法

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

如果我们将两个要比较的字符串中的某一个值设为空,并调用equals方法进行比较,那么他就会报异常

 

 

这个时候就需要使用Objects中equals方法

 

 

    public static void main(String[] args) {
        String s1 = null;
        String s2 = "aaa";
//        boolean equals = s1.equals(s2);
        boolean equals = Objects.equals(s1, s2);
        System.out.println(equals);
    }

 

调用equals方法并将两个字符串进行参数赋值

 

posted @   xjw12345  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示