栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

equals()方法与hashcode()方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

equals()方法与hashcode()方法

为什么重写 equals 方法必须重写 hashcode 方法

equals 方法和 hashCode 都是 Object 中定义的方法,它们经常被一起重写。
equals 方法是用来比较对象大小是否相等的方法,hashcode 方法是用来判断每个对象 hash 值的方法。

如果只重写 equals 方法而不重写 hashcode 方法,很可能会造成两个不同的对象,它们的 hashcode 也相等,造成冲突。

例如:

public static void main(String[] args) {
        System.out.println("==========");
        String a1 = "通话";
        String a2 = "重地";
        System.out.println(a1.hashCode() == a2.hashCode());   //true
        System.out.println(a1.equals(a2));    // false
    }

它们两个的 hashcode 值相等,但是 equals 不相等。

总结:

  • 如果在 Java 运行期间对同一个对象调用 hashCode 方法后,无论调用多少次,都应该返回相同的 hashCode;但是在不同的 Java 程序中,执行 hashCode 方法的返回值可能不一致。
  • 如果两个对象的 equals 相等,那么 hashCode 必须相同。
  • 如果两个对象 equals 不相等,那么 hashCode 也有可能相同,所以需要重写 hashCode 方法,因为不知道 hashCode 的底层构造,所以需要重写 hashCode 方法,来为不同的对象生成不同的 hashCode 值,这样能够提高不同对象的访问速度。
  • hashCode 通常是将地址转换为整数来实现的。
两个对象的 hashcode 相同,那么 equals 是否也一定为 true

不一定。例如,重写了 hashcode 方法,来算取余数,那么可能两个对象的 hashcode 会重复,但是两个对象的 equals 却不一定相同。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号