重写Object的equals方法和Objects的equals方法

Object类的equals方法默认比较的是两个对象的地址值,没有意义
所以我们需要重写equals方法,比较两个对象的属性值(name,age等等);
对象的属性值一样返回true否则返回false
问题:
隐含着一个对套
Object obj = p2 = new Person("古力娜扎",18);
多条弊端:
无法使用子类特有的内容(属性,方法)
解决:可以使用向下转型(强转)把Object类型转换为Person
Person person = (Person) o;

    @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 &&
                Objects.equals(name, person.name);
    }
	
	class Test{
		public static void main(String[] args){
		Person p1 = new Person("张三",11);
		Person p2 = new Person("张三",11);
		
		System.out.println(p1.equals(p2));//true
		}
	}

在刚才IDEA自动重写的equals代码中,使用到了java.util.Objects类,那么这个类是什么呢?
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它有一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-toleran(容忍空指针的)
用于计算对象的hashcode。返回对象的字符串表示形式,比较两个对象
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题方法如下
public static boolean equals(Object a,Object b);//判断两个对象是否相等
源码:

public static boolean equals(Object a,Object b){
	return (a==b) || (a!=null && a.equals(b));
}


public class Test02 {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = null;

/*        boolean b = str2.equals(str1);//NullPointerException null是不能调用方法的,会抛出空指针异常
        System.out.println(b);*/

        boolean b = Objects.equals(str1, str2);//false
        System.out.println(b);
    }
}
posted @ 2022-07-04 11:02  我滴妈老弟  阅读(113)  评论(0编辑  收藏  举报