关于Java Object你真的了解了吗
导读:在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了解一下的。毕竟是基础中的基础。
下面给出一个简单比较全面的概要:
1.hashCode()和equals()
publicbooleanequals(Objectobj){return(this==obj);}
publicnativeinthashCode();
1.当equals()方法被override时,hashCode()也要被override.
2.当equals()返回true,hashcode一定相等。即:相等(相同)的对象必须具有相等的哈希码(或者散列码)
3.如果两个对象的hashCode相同,它们并不一定相同。
4.在集合查找时,hashcode能大大降低对象比较次数,提高查找效率!
在判断重复元素时,直接通过hashcode()方法,定位到桶位置,如果该位置有元素,再调用equals()方法判断是否相等。而不是遍历每一个元素比较equals()!
2.clone()深复制
publicclassAnimalimplementsCloneable{ privateintheight; privateintage; publicAnimal(intheight,intage){ this.height=height; this.age=age; } @Override publicObjectclone()throwsCloneNotSupportedException{ returnsuper.clone(); } } publicclassPeopleimplementsCloneable{ privateintheight; privateintage; privateAnimala; publicPeople(intheight,intage,Animala){ this.height=height; this.age=age; this.a=a; } @Override publicObjectclone()throwsCloneNotSupportedException{ Peoplep=(People)super.clone(); p.a=(Animal)a.clone(); returnp; } } Animala1=newAnimal(100,3); Peoplep1=newPeople(173,24,a1); //深复制 Peoplep2=(People)p1.clone();
3.wait()和notify()
•只有获得该对象锁之后才能调用,否则抛IllegalMonitorStateException异常
•任何一个时刻,对象的控制权(monitor)只能被一个线程拥有。
线程取得控制权的方法有三:
1.执行对象的某个同步实例方法。
2.执行对象对应类的同步静态方法。
3.执行对该对象加同步锁的同步块。
执行对该对象加同步锁的示例:
synchronized(pepoleObject){ pepoleObject.notifyAll(); pepoleObject.wait(); }
4.finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾加收器调用此方法,只能调用一次。当对象被回收时需要配置系统资源或执行其他清除,子类重写finalize方法实现。
以上这篇关于JavaObject你真的了解了吗就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。