java中equals,==和hashCode关系揭秘

1. ==

(1)比较基本数据类型,比较的是它们的值:byte,short,char,int,long,float,double,boolean.
(2)比较引用类型(类,接口,数组),比较的是它们在内存中的存放地址,即,相同的对象才为true.html

2.equals方法:

(1)默认状况下的Object类的原生的equals方法,用于比较对象的内存地址,此时与==是等价的。
(2)类中覆盖了原生的equals方法,就须要根据代码具体判断。通常覆盖后的新equals方法都是比较对象的内容,如String类。算法

3.hashCode方法:返回一个hash码

(1)Object类提供的默认实现保证了每一个对象的hash码都不一样(在对象的内存地址的基础上通过特定算法返回一个hash码)
(2)若是a = b, 则hash(a) = hash(b);
(3)若是a != b, 则hash(a)和hash(b)可能获得相同的散列值
(4)hashCode方法可以将插入元素迅速定位到它的位置(其中还涉及到冲突碰撞的问题)数组

4.equals方法和hashCode方法的关系:

(1)若是两个对象equals,Java运行时环境会认为他们的hashcode必定相等。
(2)若是两个对象不equals,他们的hashcode有可能相等。
(3)若是两个对象hashcode相等,他们不必定equals。
(4)若是两个对象hashcode不相等,他们必定不equals。
(5)所以,若重写equals(Object obj)方法,有必要重写hashcode()方法,确保经过equals(Object obj)方法判断结果为true的两个对象具有相等的hashcode()返回值。code

参考资料htm

相关文章
相关标签/搜索