hashCode()和 equals()方法的默认实现

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,分割抠图1万点
NLP自然语言处理_高级版,每接口累计50万次
简介: 在Java中,`hashCode()` 和 `equals()` 方法的默认实现由 `Object` 类提供。`equals()` 默认比较对象引用是否相同,`hashCode()` 则返回对象的内存地址的整数表示。为了确保哈希表等数据结构的正确性,当重写 `equals()` 时,通常也需要重写 `hashCode()`。
  1. Object类中equals()方法的默认实现
    • 在Java中,所有的类都直接或间接继承自Object类。Object类中的equals()方法默认实现是比较两个对象的引用是否相同。
    • 代码示例:
      class MyClass{
             
        // 这里没有重写equals方法,使用Object类的默认equals方法
      }
      public class Main {
             
        public static void main(String[] args) {
             
            MyClass obj1 = new MyClass();
            MyClass obj2 = new MyClass();
            MyClass obj3 = obj1;
            System.out.println(obj1.equals(obj2)); // false,因为obj1和obj2是不同的对象引用
            System.out.println(obj1.equals(obj3)); // true,因为obj3和obj1指向同一个对象
        }
      }
      
    • 这意味着在没有重写equals()方法的情况下,equals()方法的行为和==操作符类似,都是比较两个对象的内存地址是否相同。
  2. Object类中hashCode()方法的默认实现
    • Object类中的hashCode()方法返回对象的一个哈希码,这个哈希码是根据对象的内存地址计算出来的(不同的JVM实现可能会有所不同,但通常与内存地址有关)。
    • 示例代码:
      class MyClass{
             
        // 这里没有重写hashCode方法,使用Object类的默认hashCode方法
      }
      public class Main {
             
        public static void main(String[] args) {
             
            MyClass obj1 = new MyClass();
            MyClass obj2 = new MyClass();
            System.out.println(obj1.hashCode()); 
            System.out.println(obj2.hashCode()); 
            // 一般情况下,obj1和obj2的hashCode不同,因为它们是不同的对象引用,具有不同的内存地址
        }
      }
      
    • 由于默认的hashCode()方法是基于对象的内存地址,所以不同的对象通常会有不同的哈希码,但这并不是绝对的,在某些特殊情况下,不同对象可能会有相同的默认哈希码(虽然这种情况很少见)。

如果要根据对象的内容而不是内存地址来比较对象是否相等或者确定哈希码,就需要在自定义类中重写equals()hashCode()方法。

相关文章
|
7月前
|
存储 算法 Java
为什么要重写 hashcode 和 equals 方法
为什么要重写 hashcode 和 equals 方法
61 0
|
1月前
|
存储 Java
两个对象的 hashCode()相同,则 equals()
当两个对象的 `hashCode()` 方法返回值相同时,这两个对象的 `equals()` 方法不一定返回 `true`。`hashCode()` 相同仅表示两对象可能相等,需进一步通过 `equals()` 方法验证对象是否真正相等。
30 7
|
5月前
|
Java 容器
equals与hashcode的区别与联系
equals与hashcode的区别与联系
|
7月前
|
存储 Java
为什么要重写hashCode()和equals()(深入了解)
为什么要重写hashCode()和equals()(深入了解)
|
算法 Java 索引
equals方法和hashCode方法之间的那些事(1.1)
equals方法和hashCode方法之间的那些事(1.1)
为什么要重写 hashcode 和 equals 方法?
为什么要重写 hashcode 和 equals 方法?
85 0
|
存储
"=="和 equals 方法究竟有什么区别?
"=="和 equals 方法究竟有什么区别?
133 0
|
算法 安全 Java
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
@EqualsAndHashCode - 相等更简单:从对象的字段生成hashCode和equals实现
716 0
|
存储 NoSQL
简单讲一下 HashCode() 与 equals()方法
简单讲一下 HashCode() 与 equals()方法.
113 0
hashCode和equals的区别
hashCode和equals的区别
331 0
下一篇
DataWorks