关于Java Object你真的了解了吗

网友投稿 167 2023-05-28


关于Java Object你真的了解了吗

导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么hccfAIBA作用?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方法实现。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:移动端利用H5实现压缩图片上传功能
下一篇:整理关于Bootstrap列表组的慕课笔记
相关文章

 发表评论

暂时没有评论,来抢沙发吧~