hashCode与equals和==的区别与联系

  

equals

可见默认的equals方法,直接调用==,比较对象地址,比较JVM中的地址。

2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。

hashCode比较的是哈希码

如果对象的equals方法被重写,那么对象的hashCode也尽量重写

如果对象不重写该方法,则返回相应对象的32为JVM内存地址

hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;

  1. 1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有  
  2. 例如内存中有这样的位置  
  3. 0  1  2  3  4  5  6  7    
  4. 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找时就需要到这八个位置里挨个去找,或者用二分法一类的算法。  
  5. 但如果用hashcode那就会使效率提高很多。  
  6. 我们这个类中有个字段叫ID,那么我们就定义我们的hashcode为ID%8,然后把我们的类存放在取得得余数那个位置。比如我们的ID为9,9除8的余数为1,那么我们就把该类存在1这个位置,如果ID是13,求得的余数是5,那么我们就把该类放在5这个位置。这样,以后在查找该类时就可以通过ID除 8求余数直接找到存放的位置了。  
  7.   
  8. 2.但是如果两个类有相同的hashcode怎么办那(我们假设上面的类的ID不是唯一的),例如9除以8和17除以8的余数都是1,那么这是不是合法的,回答是:可以这样。那么如何判断呢?在这个时候就需要定义 equals了。 
扫描二维码关注公众号,回复: 6075431 查看本文章

  java中的==是比较两个对象在JVM中的地址

猜你喜欢

转载自blog.csdn.net/llhh11149/article/details/70159560