HashCode()与equals()深入理解

1、hashCode()和equals()方法都是Object类提供的方法,

    hashCode()返回该对象的哈希码值,该值通常是一个由该对象的内部地址转换而来的int型整数,

 Object的equals()方法等价于==,也就是判断两个引用的对象是否是同一对象,所谓同一对象就是指内存中同一块存储单元

2、要判断两个对象逻辑相等就要覆盖equals()方法,当覆盖equals()方法时建议覆盖hashCode()方法,

官方hashCode的常规协定是如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。 

 

3、在一些散列存储结构的集合中(Hashset,HashMap...)判断两个对象是否相等是先判断两个对象的hashCode是否相等,再判断两个对象用equals()运算是否相等

4、hashCode是为了提高在散列结构存储中查找的效率,在线性表中没有作用。

5、若两个对象equals返回true,则hashCode有必要也返回相同的int数。

6、同一对象在执行期间若已经存储在集合中,则不能修改影响hashCode值的相关信息,否则会导致内存泄露问题。

一、equals()方法

equals是Object类提供的方法之一,众所周知,每一个java类都继承自Object类,所以说每一个对象都有equals这个方法。而我们在用这个方法时却一般都重写这个方法,why?

Object类中equals()方法的源代码:

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxxjd.html