• 一、基础篇--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值的相关信息,否则会导致内存泄露问题。

  • 相关阅读:
    RabbitMQ学习之:(八)Topic Exchange (转贴+我的评论)
    RabbitMQ学习之:(六)Direct Exchange (转贴+我的评论)
    抽象类
    开闭原则
    反射
    解决默认方法冲突
    单一职责原则
    java四种访问修饰符
    Java中基本类型和包装类
    方法在继承过程中可能出现的问题
  • 原文地址:https://www.cnblogs.com/foreverYoungCoder/p/10303966.html
Copyright © 2020-2023  润新知