Java Object你真的了解了吗

导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了解一下的。毕竟是基础中的基础。下面给出一个简单比较全面的概要:

1. hashCode()和equals()

public boolean equals(Object obj) {return (this == obj);}

public native int hashCode();

  1. 当equals()方法被override时,hashCode()也要被override.

  2. 当equals()返回true,hashcode一定相等。即:相等(相同)的对象必须具有相等的哈希码(或者散列码)

  3. 如果两个对象的hashCode相同,它们并不一定相同。

  4. 在集合查找时,hashcode能大大降低对象比较次数,提高查找效率!

    在判断重复元素时,直接通过hashcode()方法,定位到桶位置,如果该位置有元素,再调用equals()方法判断是否相等。而不是遍历每一个元素比较equals()!

2. clone() 深复制


public class Animal implements Cloneable {
    private int height;
    private int age;

    public Animal(int height, int age){
        this.height = height;
        this.age = age;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class People implements Cloneable {
    private int height;
    private int age;
    private Animal a;

    public People(int height, int age,Animal a){
        this.height = height;
        this.age = age;
        this.a = a;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        People p = (People) super.clone();
        p.a = (Animal) a.clone();
        return p;
    }

}
Animal a1 = new Animal(100,3);
People p1 = new People(173,24,a1);
//深复制
People p2 = (People) p1.clone();

3. wait()和notify()

  • 只有获得该对象锁之后才能调用,否则抛IllegalMonitorStateException异常

  • 任何一个时刻,对象的控制权(monitor)只能被一个线程拥有。

    线程取得控制权的方法有三:

    1. 执行对象的某个同步实例方法。

    2. 执行对象对应类的同步静态方法。

    3. 执行对该对象加同步锁的同步块。

    执行对该对象加同步锁的示例:

        synchronized (pepoleObject) {
            pepoleObject.notifyAll();
            pepoleObject.wait();
        }

4. finalize()

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾加收器调用此方法,只能调用一次。当对象被回收时需要配置系统资源或执行其他清除,子类重写finalize方法实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值