重写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方法并将两个字符串进行参数赋值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix