目录
- 1.equals方法
- ==运算符
- equals
- 2.hashCode
- 3.toString
- 4.finalize
1.equals方法
==运算符
比较运算符,即可以判断基本类型又可以判断引用类型
如果判断基本类型,则判断值是否相等
如果判断引用类型,则判断地址是否相等,即判断是否为同一个对象
equals
是object类的一个方法,只能判断引用类型
object - equals源码:
?
1 2 3 |
|
可以清晰的看到,object类里的equals方法是判断对象的地址是否相同(是不是同一个对象)
但是,其他数据类型类会重写equals方法,比如String类的重写:(判断两个字符串的值是否相等)
?
1 2 3 4 5 6 7 8 |
|
实例:
?
1 2 3 4 |
|
2.hashCode
提高具有哈希结构的容器的效率
两个引用如果指向同一个对象,哈希值肯定(不冲突的情况下)一样,反之不一样
哈希值根据地址而来但并非地址
演示:
?
1 2 3 4 5 6 7 8 |
|
输出:
1324119927
990368553
1324119927
3.toString
返回该对象的字符串表示
源码:
?
1 2 3 |
|
实例:
?
1 2 3 |
|
输出:
classes.A@41629346
包名.类名@十六进制的hashCode
现在我们在类中重写一下toString方法(模板):
?
1 2 3 4 5 6 7 8 |
|
再次运行上面的代码,现在输出如下:
?
1 |
|
另外,当我们直接输出对象时,会默认直接调用toString方法:
?
1 |
|
输出:
A{name='dahe', age=25, job='安全服务工程师'}
4.finalize
当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作
注意:在JDK18中。finalize被弃用了。它虽然可以帮助我们主动释放系统底层资源,但是说实话,没用过,Java 是自动管理内存的,使用它反而会导致潜在的系统安全风险,没帮助不说反而是负担,所以计划移除了。
实例:
?
1 2 3 4 5 |
|
重写finalize方法:
?
1 2 3 4 |
|
除此之外,还可以主动运行垃圾回收器:
?
1 |
|