Java学习【阶段一[05]】常用API第二类(01Object类&Objects类)

mac2025-12-11  10

一、Object类概述

java.lang.Object类是Java语言中的根类,即所有类的父类。它中间描述的方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。所有对象都实现这个类的方法

如果一个类没有特别指定父类,那么默认继承来自Object类。

二、Object类的toString方法

作用:打印对象的信息

重写前:打印包名类名@地址值

重写后:打印的是对象中的属性值

package Day12_Demo01; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } /* 直接打印对象的地址值没有意义,重写Object类的toString方法 打印对象的属性(name,age) */ @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } 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; } } package Day12_Demo01; /* java.lang.Object类 类Object是类层次结构的根(最顶层)类。每个类都使用Object作为超(父)类 所有对象(包括数组)都实现这个类的方法 */ public class Demo01ToString { public static void main(String[] args) { /* Person类默认继承了Object类,所以可以使用Object类中的toString方法 String toString() 返回该对象的字符串表示 */ Person p=new Person("张三",18); String s=p.toString(); System.out.println(s);//Day12_Demo01.Person@2f92e0f4 //直接打印对象的名字其实就是调用对象的toString方法 p=p.toString(); System.out.println(p);//Day12_Demo01.Person@2f92e0f4//Person{name=张三+age=18} /*看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可 如果没有重写toString方法,那么打印的就是对象的地址值(默认) 如果重写了toString方法,那么就按照重写的方式打印 */ } }

三、Object类的equals方法

boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。          Object类equals类方法的源码:          public boolean equals(Object obj){              return(this==obj);              }              参数:              Object obj:可以传递任意的对象              方法体:              ==:比较运算符,返回的就是一个布尔值true,false              基本数据类型:比较的是值              引用数据类型:比较的是两个对象的地址值

重写前:比较对象的地址值

重写后:比较对象的属性值

package Day12_Demo01; public class Demo02Equals { public static void main(String[] args) { /* Person类默认继承了Object类,所以可以使用Object类的equals方法 boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 Object类equals类方法的源码: public boolean equals(Object obj){ return(this==obj); } 参数: Object obj:可以传递任意的对象 方法体: ==:比较运算符,返回的就是一个布尔值true,false 基本数据类型:比较的是值 引用数据类型:比较的是两个对象的地址值 this是谁?哪个对象调用的方法,方法中的this就是哪个对象;p1调用的equals方法,所以this就是p1 obj是谁?传递过来的参数p2 this==obj-->p1==p2 */ Person p1=new Person("迪丽热巴",18); Person p2=new Person("古力娜扎",18); boolean b=p1.equals(p2); System.out.println(b);//重写前false boolean c=p1.equals(p2);//重写后true System.out.println(c);//true } }

四、重写Object类的equals方法

比较两个对象的地址值没有意义,如何比较其中的参数,需要对equals方法进行重写

@Override     public boolean equals(Object obj) {         //使用向下转型(强转)把Object类型转为Person         Person p=(Person)obj;         //比较两个对象的属性:一个是调用方法的this(p1),一个是转型之后的p(obj=p2);         boolean b=this.name.equals(p.name)&&this.age==p.age;         return b;

package Day12_Demo01; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } /* 直接打印对象的地址值没有意义,重写Object类的toString方法 打印对象的属性(name,age) */ @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } /* Object类的equals方法默认比较的是两个对象的地址值,没有意义 所以需要重写equals方法,比较两个对象的属性值(name,age) 对象的属性值一样返回true,不一样返回false 问题:隐含了一个多态 Object obj=p2=new Person("古力娜扎",18); 多态的弊端:无法使用子类特有的内容(属性,方法) 解决办法:可以使用向下转型(强转)把object类型转换为Person类型 */ @Override public boolean equals(Object obj) { //增加一个判断,传递的参数obj如果是this本身,直接返回true,提高程序效率 if(obj==this) { return true; } //增加一个判断,传递的参数obj是null,直接返回false,提高程序的效率 if(obj==null) { return false; } /* 增加一个判断,是Person类型再进行转换,防止类型转换异常ClassCastException */ 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; } 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; } } package Day12_Demo01; import java.util.Random; public class Demo02Equals { public static void main(String[] args) { /* Person类默认继承了Object类,所以可以使用Object类的equals方法 boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 Object类equals类方法的源码: public boolean equals(Object obj){ return(this==obj); } 参数: Object obj:可以传递任意的对象 方法体: ==:比较运算符,返回的就是一个布尔值true,false 基本数据类型:比较的是值 引用数据类型:比较的是两个对象的地址值 this是谁?哪个对象调用的方法,方法中的this就是哪个对象;p1调用的equals方法,所以this就是p1 obj是谁?传递过来的参数p2 this==obj-->p1==p2 */ Person p1=new Person("迪丽热巴",18); Person p2=new Person("迪丽热巴",18); Random r=new Random(); //p1=p2;//p2地址值给p1,两个地址值相同 boolean c=p1.equals(p2); System.out.println(c);//true } }

五、Objects类的equals()方法

比较两个对象是否相同,但是增加了一些健壮性的判断(空指针安全或者容忍空指针),

可以防止空指针异常

最新回复(0)