zoukankan      html  css  js  c++  java
  • 一、基础篇--1.1Java基础-hashCode和equals方法的区别和联系

    hashCode和equals方法的区别和联系

    两个方法的定义

    equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。

    hashCode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回。

    官方给出的一些说明:

    • 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

    • 如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。

    • 以下情况不 是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。

    • 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

    • 当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

    总结:

    1.hashCode是为了提高在散列结构存储中查找的效率,在线性表中没有作用。

    2.equals和hashCode需要同时覆盖。

    3.如果两个对象equals返回true,则hashCode必须返回相同的int数。

    4..若两个对象equals返回false,则hashCode不一定返回不同的int数,但为不相等的对象生成不同hashCode值可以提高哈希表的性能。

    5.若两个对象hashCode返回相同int数,则equals不一定返回true。

    6.若两个对象hashCode返回不同int数,则equals一定返回false。

    7.同一对象在执行期间若已经存储在集合中,则不能修改影响hashCode值的相关信息,否则会导致内存泄露问题。

  • 相关阅读:
    zookeeper-3.4.6集群安装
    js 函数参数个数
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:webProject'
    开始写博客了
    使用wsimport对接WebService 生成Java客户端
    LocalDateTime反序列化报错:cannot deserialize from Object value
    MinIO上传文件The difference between the request time and the server's time is too large.异常
    Maven scope属性说明
    SpringBoot整合MinIO实现文件上传 附demo
    Map从入门到性能分析-imooc学习笔记【完】
  • 原文地址:https://www.cnblogs.com/foreverYoungCoder/p/10303966.html
Copyright © 2011-2022 走看看