Java深入探究Object类的方法
作者:小学生!! 时间:2022-11-24 06:48:53
本文主要带大家看看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
标签:Java,Object,方法
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SSH原理及两种登录方法图文详解
2023-11-14 11:10:53
![](https://img.aspxhome.com/file/2023/8/59038_0s.png)
Springmvc Controller接口代码示例
2023-11-28 10:13:25
SpringBoot 返回Json实体类属性大小写的解决
2023-08-05 12:30:49
解决BeanUtils.copyProperties无法成功封装的问题
2023-11-23 14:59:23
java 动态生成SQL的实例讲解
2021-05-25 18:26:06
Springboot配置文件内容加密代码实例
2022-09-13 05:56:09
![](https://img.aspxhome.com/file/2023/3/64023_0s.png)
利用logback 设置不同包下的日志级别
2022-08-11 20:05:43
java创建多级目录文件的实例讲解
2023-11-27 09:29:02
Java去掉数字字符串开头的0三种方法(推荐)
2022-05-31 08:04:41
hadoop运行java程序(jar包)并运行时动态指定参数
2023-07-27 11:02:10
![](https://img.aspxhome.com/file/2023/9/57829_0s.png)
springcloud注册hostname或者ip的那些事
2022-05-06 00:57:37
![](https://img.aspxhome.com/file/2023/9/65369_0s.png)
关于MVC与SpringMVC的介绍、区别、执行流程
2023-11-28 02:25:56
SpringBoot redis分布式缓存实现过程解析
2023-10-10 22:32:25
![](https://img.aspxhome.com/file/2023/1/58541_0s.png)
SpringCloud版本问题报错及解决方法
2023-01-29 23:19:46
![](https://img.aspxhome.com/file/2023/1/61561_0s.png)
java 优雅关闭线程池的方案
2022-03-20 23:05:44
详解Java的TCP/IP编程学习--基于定界符的成帧
2023-11-23 03:02:32
Java JDK11基于嵌套的访问控制的实现
2021-07-11 10:02:05
Java实现NIO聊天室的示例代码(群聊+私聊)
2023-11-29 00:57:45
![](https://img.aspxhome.com/file/2023/8/59698_0s.jpg)
maven profile实现多环境配置的示例
2023-09-24 12:02:57
![](https://img.aspxhome.com/file/2023/3/64513_0s.png)
android Retrofit2+okHttp3使用总结
2023-07-31 21:02:10