Object中的equals类

/*
    Objects中的equals方法。
    static boolean equals​(Object a, Object b): 比较a和b是否相同。
    如果通过Objects调用equals方法,内部会通过第一个对象调用equals和第二个对象进行比较
    如果我们想要比较对象的内容,还是要在子类中重写equals
//ALT+INSERT快捷键,在子类teacher中插入重写的equals方法,重写的equals方法比较内容是否相同
 */
 
public class Demo04ObjectsEquals {
    public static void main(String[] args) {
        //创建三个对象
        Teacher t1 = new Teacher("小苍老师", 35);
        Teacher t2 = new Teacher("小苍老师", 35);
        //使用Objects里面的equals方法进行比较
        System.out.println(Objects.equals(t1, t2));
        System.out.println("-------------------------");
        t1 = null;
        t2 = null;
        //System.out.println(t1.equals(t2)); // java.lang.NullPointerException
        System.out.println(Objects.equals(t1, t2)); //true
    }
}

/*
    如果使用==比较引用类型,比较的是地址值。
    如果想要比较对象的内容,可以使用equals方法(Object中)
    当通过一个对象调用equals方法,会先看一下自己有没有,如果自己没有,就向上找父类一直到Object
    在Object中的equals方法,默认是使用==比较的地址值。
    如果想要自己定义比较的规则,可以在子类中重写equals方法,在equals方法中定义自己的规则。
 */
public class Demo03ObjectEquals {
    public static void main(String[] args) {
        //创建三个Person对象
        Person p1 = new Person("王包强", 18);
        Person p2 = new Person("贾耐亮", 20);
        Person p3 = new Person("贾耐亮", 20);
        //使用==进行比较
        System.out.println(p1 == p2); //false
        System.out.println(p2 == p3); //false
        System.out.println("---------------------------");
        System.out.println(p1.equals(p2)); //false
        System.out.println(p2.equals(p3)); //false

        //System.out.println(p2.equals(new Dog()));
    }
}



在Java,所有的对象都继承了Objectequals()方法。equals()方法用于比较两个对象是否相等,其默认实现是比较两个对象的引用是否相等。也就是说,如果两个对象的引用指向同一个内存地址,那么它们就相等,否则它们不相等。 如果想要比较两个对象的内容是否相等,就需要在自定义的覆盖equals()方法,根据自定义的比较规则来实现。在覆盖equals()方法时,需要注意以下几点: 1. equals()方法必须满足自反性、对称性、传递性和一致性。 2. equals()方法必须检查参数是否为null,并返回false。 3. equals()方法必须检查参数是否为同一型的对象,并返回false。 4. equals()方法必须比较对象的内容而不是引用。 例如,下面是一个自定义的Person,覆盖了equals()方法来比较两个Person对象的内容是否相等: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Person other = (Person) obj; if (!Objects.equals(this.name, other.name)) { return false; } if (this.age != other.age) { return false; } return true; } } ``` 在这个例子,覆盖了equals()方法来比较两个Person对象的name和age属性是否相等。需要注意的是,equals()方法使用了Objects.equals()方法来比较两个字符串是否相等,这个方法可以避免了比较null值时的NullPointerException异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值