hashcode、equals、==的区别

equals() 的作用

equals() 的作用是 用来判断两个对象是否相等

类是否覆盖equals()方法
  1. 没有覆盖equals()方法
    p1.equals(p2) 来“比较p1和p2是否相等时”,实际上,调用的Object.java的equals()方法,即调用的 (p1==p2) 。它是比较“p1和p2是否是同一个对象”。
  2. 覆盖equals()方法

equals与hashcode的区别

  1. 如果两个对象相等(equals),那么他们一定有相同的哈希值(hashcode)。

  2. 如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要通过equals来判断)

     1、自反性:
     对于任何非空引用值 x,x.equals(x) 都应返回 true。
     
     2、对称性:
     对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
     
     3、传递性:
     对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
     
     4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
     
     5、非空性:对于任何非空引用值 x,x.equals(null) 都应返回 false。
    
equals() 与 == 的区别是什么
  • == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不试同一个对象

  • equals() : 它的作用也是判断两个对象是否相等。

      两种使用情况
      
    情况1,类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
    
    情况2,类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
    
hashCode() 的作用

hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。

上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。

也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

在散列表中,
1、如果两个对象相等,那么它们的hashCode()值一定要相同;
2、如果两个对象hashCode()相等,它们并不一定相等。
hashCode() 和 equals() 的关系
第一种 不会创建“类对应的散列表”

这里所说的“不会创建类对应的散列表”是说:我们不会在HashSet, Hashtable, HashMap等等这些本质是散列表的数据结构中,用到该类。

p1和p2相等的情况下,hashCode()也不一定相等。

第二种 会创建“类对应的散列表”

这里所说的“会创建类对应的散列表”是说:我们会在HashSet, Hashtable, HashMap等等这些本质是散列表的数据结构中,用到该类。例如,会创建该类的HashSet集合。

在这种情况下,该类的“hashCode() 和 equals() ”是有关系的:
    1)、如果两个对象相等,那么它们的hashCode()值一定相同。
          这里的相等是指,通过equals()比较两个对象时返回true。
    2)、如果两个对象hashCode()相等,它们并不一定相等。
    3)、也就是说会存在 不等的key有相同hashcode()值的情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值