Java中 hashCode()和equals()的相关问题

本文章主要围绕以下四个部分进行回答

目录

 第一部分 equals()的作用

第二部分 equals()和 == 的区别是什么

第三部分 hashCode()的作用


 

 第一部分 equals()的作用

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

equals()定义在JDK的Object.java中。通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等。源码如下

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

因为equals()方法定义在Object.java中,这就意味着所有的java类都实现了equals()方法,所有的类都可以通过equals()方法去判断是否相等。

但是使用默认的equals()方法等同于"==",因此,我们需要重写equals方法,即若两个对象的内容相等,则equals方法返回true,否则返回fasle.

我们可以分为两种情况去讨论

  1. 若某个类没有覆盖equals()方法,当它通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象,这是也就等价于通过" == "去比较这两个对象
  2. 我们可以通过重写equals()方法,来让equals()通过其他方式比较两个对象是否相等。一般情况下,若这两个对象的内容相等,则equals()方法返回true;否则,返回false

Java对equals()的要求

  1. 对称性:如果x.equals(y)返回是true,那么y.equals(x)返回也应该是true
  2. 反射性:x.equals(x)必须返回true
  3. 类推性:如果x.equals(y)返回的是true,而且y.equals(x)返回的是true,那么z.equals(x)也应该返回true
  4. 一致性:如果x.equals(y)返回是true,只要x和y的内容一直不变,不管你重复x.equals(y)多少次,返回都是true
  5. 非空性:x.equals(null),永远返回false;x.equals(和x不同类型的对象)永远返回时false

第二部分 equals()和 == 的区别是什么

==:作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象

equals():作用也是判断两个对象是否相等,但需要分两种情况,我们在第一部分也进行过阐述

第三部分 hashCode()的作用

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

hashCode()同样也是定义在Object.java中,意味着Java中的任何类中都包含有hashCode()函数

注意:虽然每个Java类中都包含hashCode()函数,仅仅当创建某个"类的散列表"时,该类的hashCode()才有用(作用是:确定该类的每一个对象在散列表中的位置);其他情况下(如:创建类的单个对象,或者创建类的对象数组等等),类的hashCode()没有作用

上述注意中的散列表是指:java集合中本质是散列表的类,如HashMap,HashTable,HashSet

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值