Object类的equals方法和Object类的总结
Object类的equals方法
Object equals() 方法用于比较两个对象是否相等。
equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等。
注意:如果子类重写了 equals() 方法,就需要重写 hashCode方法,比如 String 类就重写了 equals() 方法,同时也重写了 hashCode() 方法。
public static void main(String[] args) { // String s1 = "abc "; //boolean b = s1.equals(s2 );//NuLlPointerException nuLl是不能调用方法的,会抛出空指针异常 \ // system.out.printLn(b); //Object类的equals方法:对两个对象进行比较,防止空指针异常 // public static boolean equals(Object a, Object b) { // return (a == b) || (a != null &8 a.equals)); // } String s1 = null; String s2 = "abc" ; boolean b2 = Objects.equals(s1,s2); System.out.println(b2); String s3 = null; String s4 = "def" ; boolean b = Objects.equals(s3,s4); System.out.println(b); String s5 = null; String s6 = "abc" ; boolean b3 = Objects.equals(s5,s6); System.out.println(b3); }
Object类的总结
1.Object类介绍
object类是所有类的父类。一个类都会直接或者间接的继承自该类该类中提供了一些非常常用的方法!
2.toString()方法
A∶作用
打印对象的信息
B∶重写前:打印的是包名类名@地址值
C∶重写后︰打印的是对象中的属性值
重写前的
//测试 Person p = new Person("张三", 18, "男"); System.out.println(p); //Person public class Person { private String name; private int age; private String sex; public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public Person() { } 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }
结果
com.Demo_02.Person@2c63a86d
重写后
//测试 Person p = new Person("张三", 18, "男"); String s = p.toString(); System.out.println(s); //直接打印对象的名字,其实就是调用对象的toString方法 p = p.toString( ); // System.out.println(p); //person public class Person { private String name; private int age; private String sex; public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public Person() { } 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; }
结果
Person{name='张三', age=18, sex='男'}
3.equals()方法
A:作用:比较两个对象的
B:重写前:比较的是对象的地址值
C:重写后∶比较的是对象中的属性值
比较两个对象是否相同,但是加了一些健壮性的判断
重写前
测试 Person p1 = new Person( "马尔扎哈",18,"男"); Person p2 = new Person( "莫扎特" , 18,"男"); p1=p2; System.out.println(p1); System.out.println(p2); boolean b = p1.equals(p2); System.out.println(b); //person public class Person { private String name; private int age; private String sex; public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public Person() { } 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }
结果
com.Demo_02.Person@27716f4
com.Demo_02.Person@27716f4
true
重写后
//person package com.Demo_02; import java.util.Objects; public class Person { private String name; private int age; private String sex; public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public Person() { } 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; } @Override public boolean equals(Object obj) { //增加一个判断,传递的参数obj是this本身,直接返回true,提高程序效率 if (obj == this) { return true; } //增加一个判断,传递的参数obj是null,直接返回false,提高程序的效率 if (obj == null) { return false; } //增加一个判断,是Person类型在转换,防止类型转换异常CLasscastException* /l if (obj instanceof Person) { //使用向下转型(强转)把object类型转换为Person Person p = (Person) obj; //比较两个对象的属性;一个是调用方法的this(p1),一个就是p(obj=p2) boolean b = this.name.equals(p.name) && this.age == p.age; return b; //不是Person类型直接返回false } return false; } } 测试 Person p1 = new Person( "马尔扎哈",18,"男"); Person p2 = new Person( "莫扎特" , 18,"男"); p1=p2; System.out.println(p1); System.out.println(p2); boolean b = p1.equals(p2); System.out.println(b); 结果
Person{name='莫扎特', age=18, sex='男'}
Person{name='莫扎特', age=18, sex='男'}
true
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律