Java深入探究Object类的方法
作者:小学生!! 发布时间:2022-11-24 06:48:53
标签:Java,Object,方法
本文主要带大家看看Object类中一些常用方法的API文档的介绍和JDK中的源码。
1.equals方法
1.API中equals方法的介绍
2.==和equals 的对比
== 既可以判断基本类型,又可以判断引用类型,如果判断的是基本类型,判断的是值是否相等,如果判断的是引用类型,则判断的是地址是否相等,即判断是不是同一个对象。
equals 方法是 Object 类中的方法,只能判断引用类型,默认的是判断地址是否相等,子类中往往会重写该方法,重写后用于判断内容是否相等
我们可以看看 Object,String 和 Integer中的 equals 方法的 JDK 源码。
Object o = new Object();
o.equals(1);//Object类中的equals方法
System.out.println("hello".equals("hello"));//String中的equals方法
Integer integer = new Integer(5);
System.out.println(integer.equals(5));//Integer中的equals方法
//将光标放在equals方法上,按Ctrl同时按鼠标左键,就可跳转到String和Integer中的equals方法的JDK源码。
//Object类中的equals方法
public boolean equals(Object obj) {
return (this == obj);//判断是不是当前对象
}
//String类中重写的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;//首先判断是不是当前对象
}
if (anObject instanceof String) {//判断当前类型是不是字符串类型
String anotherString = (String)anObject;//向下转型
int n = value.length;//保存传入字符串的长度
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])//一个一个字符比较
return false;
i++;
}
return true;
}
}
return false;
}
//Integer类中重写的equals方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {//判断当前类型是不是Integer类型
return value == ((Integer)obj).intValue();//向下转型
}
return false;
}
2.hashCode方法
1.API中hashCode方法的介绍
2.提高具有哈希结构容器的的效率。
3.两个引用,如果指向的同一个对象,哈希值一样,指向不同对象,哈希值就不一样。
4.哈希值主要根据地址来的,但不能将哈希值等价于地址。
3.toString方法
1.API中toString方法的介绍
2.默认返回:全类名(包名+类名)+@+哈希值的十六进制。
3.往往重写toString方法,用于返回对象属性。
4.当直接输出对象时,toString方法会被默认的调用。
//JDK中的toString方法源码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
//返回全类名(包名+类名)+@+哈希值的十六进制
}
//重写toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}//往往重写toString方法,用于返回对象属性。
4.finalize方法
1.API中finalize方法的介绍
2.对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作。
3.当某个对象没有引用时,jvm就会使用垃圾回收机制来销毁此对象,销毁对象前会先调用finalize方法。
4.垃圾回收机制的调用,是由系统的GC算法来决定的,也可通过System.gc()主动触发。
来源:https://blog.csdn.net/m0_54024106/article/details/124510250


猜你喜欢
- 使用Spring3 实现用户登录以及权限认证这里我就简单介绍一下,我在实现的时候处理的一些主要的实现。1.用户登录 <form act
- 什么是线程池线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。
- Java计算一段程序的运行时间介绍了两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算。毫秒级别计算时间  
- 前面有文章曾经地介绍过MediaPlayer的基本用法,这里就更加深入地讲解MediaPlayer的在线播放功能。本文主要实现MediaPl
- 一,SQL注入–1,需求–1,利用jdbc查询user的信息,如果信息正确就登录,否则提示错误–1,创建user表,指定字段id name
- 一、前言随着微服务治理手段越来越多,对开发者来说,不同微服务之间的接口调用是日常开发中非常普遍的事情,以springcloud生态体系的微服
- Java8 移除两个相同List对象List<Data> data1 = new ArrayList<>(
- 一、加密介绍本文采用对称式加密算法DES和非对称式加密算法RSA结合做数据传输加密的方式。先说一下对称式加密 DES:对称式加密即使用单钥密
- 类型转换Convert.To类型()1、表达式将变量和字面值(在使用运算符时,他们都称作操作数)与运算符组合起来就得到了表达式,它是计算的基
- 一、 DataTable转换到List<T>/// <summary> /// TableT
- 一,准备沙箱环境1,登录支付宝,进入 应用列表界面 https://openhome.alipay.com/dev/workspace2,如
- 引言我已经一个多星期没碰过电脑了,今日上班,打开电脑的第一件事就是想着写点什么。反正大家都还沉浸在节后的喜悦中,还没进入工作状态,与其浪费时
- NuGet 安装SqlSugar1.Model文件下新建 DbContext 类 public class DbContext
- 本文实例为大家分享了Android自动播放Banner图片轮播的具体代码,供大家参考,具体内容如下先看一下效果图支持本地图片以及网络图片or
- 本文重在实现理解,过滤器,业务,逻辑需求,样式请无视。。项目结构如下1.idea新建Spring boot项目,在pom中加上thymele
- 一、Java后端使用MultipartFile@PostMapping(value = "/upload")  
- 一、蒙特卡洛法介绍蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是一种以概率统计理论为基础
- 验证码及它的作用验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是
- 在SpringBoot中,当需要获取到配置文件数据时,除了可以用Spring自带的@Value注解外,SpringBoot提供了一种更加方便
- 本文实例讲述了asp.net实现遍历Request的信息操作。分享给大家供大家参考,具体如下:#需求:在服务端获取从客户端发送过来的所有数据