Object方法

2020-08-11  本文已影响0人  小虫虫奇遇记

equals 和 “==”区别?

== 对于基本类型数据,比较的是值是否相等,对于对象类型,比较的是对象的引用地址是否相同。
Object的equals()方法,也比较的是对象的引用地址是否相等。但大多数类会自重写equals方法,使得比较的是对象内容,比如String重写后,比较的就是对象的值是否相等。

    // Object.java
    public boolean equals(Object obj) {
        return (this == obj);
    }
Integer a = 3;
Integer b = 3;
a == b;true
a.equals.b;true

//超过[-128,127]区间就创建新的对象,没超过取的缓存
Integer a = 300;
Integer b = 300;
a == b;false
a.equals.b;false
int b = 3;
a==b;a 会自动拆箱,返回true

wait 和 notify

可用于线程间通信,必须用在synchronized()方法块中才有效。wait方法会自动释放对象锁,直到有nofity调用后才会重新获得对象锁执行线程。

clone()

  @NonNull
    @Override
    public Object clone() throws CloneNotSupportedException {
        Person person = new Person();
        person.name = this.name;
        person.age = this.age;
        //对象的引用也要拷贝,才能实现深拷贝
        person.course = (Course) this.course.clone();
        return person;
    }

参考:https://blog.csdn.net/xinghuo0007/article/details/78896726

finalize

  1. GC时才调用对象的finalize方法 做一些清理工作
    垃圾回收器只知道那些显式地经由new分配的内存空间,之所以要使用finalize(),是存在着垃圾回收器不能处理的特殊情况。如果使用a. c++的malloc方法申请的内存 b. 打开的文件资源,这些资源不属于垃圾回收器的回收范围, 需要在finalize方法中清理进行手动释放。
  2. 也可以在finalize重新赋予对象强引用使其不用被回收
上一篇 下一篇

猜你喜欢

热点阅读