两个对象的 hashCode()相同,则 equals()

简介: 当两个对象的 `hashCode()` 方法返回值相同时,这两个对象的 `equals()` 方法不一定返回 `true`。`hashCode()` 相同仅表示两对象可能相等,需进一步通过 `equals()` 方法验证对象是否真正相等。
  1. 首先明确hashCode()equals()方法的关系:
    • 在Java中,hashCode()方法是用来获取对象的哈希码,这个哈希码主要用于哈希表(如HashMapHashSet等数据结构)中确定对象的存储位置。equals()方法用于比较两个对象是否在逻辑上“相等”。
    • 根据Java的规范,如果两个对象通过equals()方法比较返回true,那么它们的hashCode()方法必须返回相同的值。但是,反过来并不一定成立。
  2. 当两个对象的hashCode()相同,它们的equals()方法不一定返回true
    • 例如,假设有一个简单的Person类,它有两个属性nameage,重写hashCode()方法时只考虑age属性来生成哈希码,重写equals()方法时考虑nameage两个属性。
      class Person {
             
        private String name;
        private int age;
        public Person(String name, int age) {
             
            this.name = name;
            this.age = age;
        }
        @Override
        public int hashCode() {
             
            return Integer.hashCode(age);
        }
        @Override
        public boolean equals(Object obj) {
             
            if (obj == this) {
             
                return true;
            }
            if (!(obj instanceof Person)) {
             
                return false;
            }
            Person other = (Person) obj;
            return this.name.equals(other.name) && this.age == other.age;
        }
      }
      
    • 可以创建两个Person对象:Person p1 = new Person("Alice", 20);Person p2 = new Person("Bob", 20);。这两个对象的hashCode()方法返回相同的值(因为它们的age都是20),但是它们的equals()方法返回false,因为name属性不同。

所以,两个对象的hashCode()相同,则equals()方法不一定返回true

相关文章
|
6月前
|
存储 算法 Java
为什么要重写 hashcode 和 equals 方法
为什么要重写 hashcode 和 equals 方法
54 0
|
23小时前
|
Java
hashCode()和 equals()方法的默认实现
在Java中,`hashCode()` 和 `equals()` 方法的默认实现由 `Object` 类提供。`equals()` 默认比较对象引用是否相同,`hashCode()` 则返回对象的内存地址的整数表示。为了确保哈希表等数据结构的正确性,当重写 `equals()` 时,通常也需要重写 `hashCode()`。
|
4月前
|
Java 容器
equals与hashcode的区别与联系
equals与hashcode的区别与联系
|
6月前
|
存储 Java 对象存储
当hashCode相同时,equals是否也相同?
当hashCode相同时,equals是否也相同?
33 0
|
6月前
|
存储 Java
为什么要重写hashCode()和equals()(深入了解)
为什么要重写hashCode()和equals()(深入了解)
为什么要重写 hashcode 和 equals 方法?
为什么要重写 hashcode 和 equals 方法?
81 0
|
存储 缓存 Java
深入理解= = 、equals()与hashcode()的关系
理解= = 、equals()与hashcode()的关系
107 0
深入理解= = 、equals()与hashcode()的关系
|
算法 安全 Java
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
|
存储 NoSQL
简单讲一下 HashCode() 与 equals()方法
简单讲一下 HashCode() 与 equals()方法.
110 0
hashCode和equals的区别
hashCode和equals的区别
324 0