两个对象的 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

相关文章
|
7月前
|
存储 算法 Java
为什么要重写 hashcode 和 equals 方法
为什么要重写 hashcode 和 equals 方法
61 0
|
7月前
|
存储 自然语言处理 算法
Object.hashCode() 详解
在Java编程中,hashCode方法是一个常见而重要的概念。它通常用于哈希表、集合以及一些需要高效检索数据的数据结构中。然而,对于许多开发者来说,hashCode方法可能是一个容易被忽略或者被简单实现的部分。在本文中,我们将深入探讨Java中hashCode的一些思考,以便更好地理解其背后的原理和影响。
184 1
Object.hashCode() 详解
|
5月前
|
Java 容器
equals与hashcode的区别与联系
equals与hashcode的区别与联系
|
7月前
|
存储 Java 对象存储
当hashCode相同时,equals是否也相同?
当hashCode相同时,equals是否也相同?
41 0
|
7月前
|
存储 Java
为什么要重写hashCode()和equals()(深入了解)
为什么要重写hashCode()和equals()(深入了解)
为什么要重写 hashcode 和 equals 方法?
为什么要重写 hashcode 和 equals 方法?
85 0
|
存储 缓存 Java
深入理解= = 、equals()与hashcode()的关系
理解= = 、equals()与hashcode()的关系
111 0
深入理解= = 、equals()与hashcode()的关系
|
算法 安全 Java
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
716 0
|
存储 NoSQL
简单讲一下 HashCode() 与 equals()方法
简单讲一下 HashCode() 与 equals()方法.
113 0
hashCode和equals的区别
hashCode和equals的区别
331 0
下一篇
DataWorks