重写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);