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
0
投稿
猜你喜欢
- jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过
- SSM Mapper查询出返回数据查不到个别字段原因开启了驼峰命名法则,Bean里的字段不识别_注释掉或者把实体类里的字段_去掉换位大写SS
- import java.util.concurrent.Semaphore;public class ThreeThread {
- 前言我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的
- package TOOLS;import java.io.BufferedReader;import java.io.File;import
- JPA自定义VO类型转换(EntityUtils工具类)在JPA查询中,如果需要返回自定义的类,可以使用EntityUtils工具类,该类源
- SpringMVC常用组件DispatcherServlet:前端控制器,不需要工程师开发,由框架提供作用:统一处理请求和响应,整个流程控制
- 前言兄弟们,刚刚又给seata社区修了一个BUG,有用户提了issue反应TransactionHook在某些情况下不会被调用:相关issu
- 使用Java的方式配置Spring我们现在要完全不使用Spring的xml配置,全权使用Java来配置Spring!JavaConfig是S
- 一、正则表达式去除代码行号作为开发人员,我们经常从网上复制一些代码,有些时候复制的代码前面是带有行号,如:MyEclipse本身自带有查找替
- static关键字static关键词与对象无关。static关键字主要修饰四个部分的内容这里我们主要介绍static修饰属性和修饰方法。1.
- 仅供学习交流,禁止商业用途。如侵害利益,联系必删!前言最近一位小伙伴钟爱二次元文化,于是找到半次元这个app,但是很快他就遇到了问题。一、案
- 一、分布式压测原理如下图(这个图说明的是要一台控制机,然后由这台控制机发压测脚本到每台远程执行机,然后由控制机收集执行机结果)二、修改 Jm
- 一、Flutter代码的启动起点我们在多数的业务场景下,使用的都是FlutterActivity、FlutterFragment。在在背后,
- 采用继承Thead类实现多线程:优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread(
- 前言使用SpringBoot来开发项目相对于传统模式,要快速优雅许多,相信目前国内绝大部分web项目的开发还没有使用SpringBoot来做
- 1.springboot启动过程中,首先会收集需要加载的bean的定义,作为BeanDefinition对象,添加到BeanFactory中
- java 工厂模式的实例详解工厂方法中的“工厂”和我们平常理解的一样:用于生产产品。而客户是要和产品打交道,所以工厂方法模式的意义在于把客户
- 表单提交这个方法是挺方便的,但在java来说就显得有些麻烦了,怎么个麻烦呢,就是当你字段多的时候,你就得一个一个的获取其对应的值,这样代码量
- 日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这