目录
equals方法:
hashCode:
toString:
finalize:
equals方法:
==和equals对比
1.==: 既可以判断基本类型,又可以判断引用类型
2.==: 如果判断基本类型,判断的是值是否相等。示例: int i=10; double d=10.0;
3.==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
1.equals:是Object类中的方法,只能判断引用类型
2.默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如 Integer,String[看看String 和 Integer的 equals 源代码]
[java基础揉碎]idea怎么查看jdk源代码-CSDN博客
this == obj 就是说如果调用equals的这个当前对象就是传进来的这个对象(地址), 就返回true
hashCode:
[java面试题]为什么同一个对象他的eques和hashCode都必须相等_为什么equels相同哈希值就相同?-CSDN博客
下例中两个不同对象的hashCode是不同的:
如果指向同一对象, 那么是相同的:
toString:
object默认输出的:
例如以下这个类没有重写toString方法默认走的就是Object的类
打印得到的值:
以下可以看到确实是hashCode转成的十六进制的值
重写之后默认是把对象的属性值输出, 也可以定制
finalize:
new了一个对象, 这个对象此时有一个引用指向了一个地址, 当等于null时, 便没有了引用, 此时car对象就是一个垃圾 , 垃圾回收器会回收(销毁)这个对象, 销毁前会调用这个对象的finalize方法:
重写了finalize后:
在执行发现没有调用finalize里面的内容是怎么回事, 是因为垃圾回收器什么时候回收不是对象一变成垃圾就立马回收的, 而是有一个垃圾回收的算法
我们可以通过System.gc()主动触发, 但是这个触发也有可能不生效的, (好比保洁阿姨正常是5点打扫卫生, 但是你觉得太脏了提前打电话叫了保洁阿姨, 此时如果保洁阿姨有时间可能立马就过来打扫, 如果此时保洁阿姨在打扫其他地方, 她可能就不过来了, 或者她就是没到点不过来) 所以说它还取决于系统的其他运行
可以看到触发了:
但是调用过程可以看到, 掉了gc后, 他不会主动阻塞到这里, 先执行了"程序退出了....", 在执行了finalize里面重写的内容: