导读: 在平时的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(); } } html" target="_blank">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方法实现。
以上这篇关于Java Object你真的了解了吗就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍关于iOS获取属性你真的了解吗?,包括了关于iOS获取属性你真的了解吗?的使用技巧和注意事项,需要的朋友参考一下 前言 属性对各位iOS开发者来说应该都不陌生,如果iOS中谈到取属性,相信大家都会夸夸其谈,不就是get方法吗?或者大谈kvc取属性的机制。不得不说这些也是对的。这时大家可能就疑惑了,那你还要说啥的!!大家不妨想想,这些都是代码层的实现,其实我们的代码最终都会被编译,然后
本文向大家介绍关于缓存你了解多少?相关面试题,主要包含被问及关于缓存你了解多少?时的应答技巧和注意事项,需要的朋友参考一下 cookie:判断用户是否登录过网站,以便实现下次自动登录或记住密码;保存事件信息等。 localstorage:敏感账号一次性登录;单页面用的较多(sessionStorage 可以保证打开页面时 sessionStorage 的数据为空)。 sessionstorage:
本文向大家介绍你真的了解BOM中的history对象吗,包括了你真的了解BOM中的history对象吗的使用技巧和注意事项,需要的朋友参考一下 前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后退和前进。本文将详细介绍BOM中的history对象
问题内容: 有人可以使用以下示例数据解释JavaScript Truthy和Falsy。我读过其他主题,但仍然感到困惑。 根据我的理解,我相信这是唯一的真理,而其余的都是虚假的-这是正确的吗? 问题答案: 据我了解,我相信var a = 1; 是唯一的真理,其余都是虚假的-这是正确的吗? 没有。 var a = 0; 数字零是 虚假的 。但是,请注意,字符串零是真实的。 var a = 10 ==
我可以使用内置函数来检查这一点。 我也可以在使用条件时使用这些真实性值。例如: 这不适用于运算符,但: 有人能解释为什么的行为似乎与条件不同吗?
本文向大家介绍Java 安全模型,你了解了吗,包括了Java 安全模型,你了解了吗的使用技巧和注意事项,需要的朋友参考一下 前言 作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑一开始就影响到 Java 语言的设计与实现。可以说 Java 在这些方