Objects
介绍:
-
所有的类,都直接或者间接的继承了 Object 类 (祖宗类)
-
Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。
常用方法:
方法名 | 说明 |
---|---|
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址 |
public Boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
5.2.1toString
方法名 | 说明 |
---|---|
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的全类名@十六进制哈希值 |
当我们打印对象名的时候, println() 源码中会自动调用对象的toString方法。
public static String valueOf(Object obj) {
return (obj == null) ? "null" :obj.toString();
}
Object类toString方法的源码:
public String toString() {
return getClass().getName() +
"@" + Integer.toHexString(hashCode());
}
解释:对象的全类名@十六进制哈希值
哈希值 = 对象的值 + 哈希算法, 常被人称作地址值
toString存在的意义:
-
父类 toString() 方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。
-
返回对象的属性信息(成员变量的值), 便于调试操作。
-
今后打印某一个对象的名字, 看到的不是地址值, 就说明该类重写过toString方法。
5.2.2equals
方法名 | 说明 |
---|---|
public boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同相同返回true,不同返回false |
//Object类中equals的源代码
public boolean equals(Object obj) {
return (this == obj);
}
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则
//如下,就是在类中重写equals方法
//stu1.equals(stu2)
//o:stu2对象
public boolean equals(Object o) {
//如果地址相同则直接返回true
if (this == o) return true;
//如果stu2是null或stu1和stu2的类型不相同(这里直接用他们的.class文件进行比较),则直接返回false
if (o == null || getClass() != o.getClass()) return false;
//由于接收的是Object对象,而其没有age属性,所以需要强制转化
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
使用此方法比较,如stu1.equals(stu2)时,如果stu1为null,则会出现空指针异常
Objects
Objects类与 Object 还是继承关系,Objects类是从JDK 1.7开始之后才有的。
方法名 | 说明 |
---|---|
public static boolean equals(Object a, Object b) | 比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较 |
public static boolean isNull(Object obj) | 判断变量是否为 null |
equals
使用方法
Object.equals(对象1,对象2);
源码分析
public static boolean equals(Object a, Object b) {
//先比价a,b地址是否相同,相同则||右边短路,返回true
//不同则在判断a是否为null,如果是则&&右边短路,返回false
//不是在调用equals方法比较,返回方法的返回值
return (a == b) || (a != null && a.equals(b));
}
接口是否继承了Object?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了