Java-hashCode与equals

前言

hashCodeequals方法是Object类包含的方法,也是我们经常用到的方法。

hashCode用来比较对象是否相同(若不一致则不相同,若一致则可能相同,加快运算)

equals直接比较两个对象是不是相同,注意不同于====运算符是判断两个对象是不是一个对象。

hashCode

这个方法在Java中的默认实现是一个native方法,也就是说这个方法并不是利用Java代码所实现的,而是更为底层的Cpp代码。

为什么会这样呢?

因为为了返回一个int型的唯一数字,并减少运算,Java的hashCode并不是真正的hashCode,而是返回对象的内存编号。

equals

equals方法在Object对象中默认就是利用==进行判断,所以我们可能会经常需要来覆写这个方法来帮助我们判断两个对象是否相同。

hashCode与equals的关系

若两个对象相同则他们的hashCode一定相同

所以覆写equals方法的时候一定要覆写hashCode方法

上面是非常重要的一点,因为在HashSet之类的集合类当中是先进行hashCode运算而后进行equals比较的,所以说当覆写equals的时候一定要记住进行覆写hashCode方法。

如果让hashCode直接返回一个固定的int值怎么样?

如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

 

 

打赏