Java学习之Object类的equals()方法

本文深入解析Java中equals方法的工作原理及为何需要与hashCode方法一同重写。通过实例演示,阐述了equals方法比较对象内容而非引用的重要性,以及hashCode方法在哈希集合中确保对象唯一性的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

喵喵喵~~~

小北今天想把Object类中的equals()方法想给大家更详细的解释一下下咯

首先equals()方法在默认的情况下比较的是对象的引用是否相同

源代码:public boolean equals(Object obj){

                          return ( this == obj );

              }

但是呢,比较对象的引用没有很大的意义,因此呢,我们一般都建议重写该方法。一般用于比较成员变量的值是否相同。

public class day11code7 {
    public static void main(String[] args) {

        String a="hello";
        String b="hello";
        System.out.println(a.equals(b));

    }
}

其实呢String这个时候已经被重写过了

因此输出的结果就是:true

那么如何来改写呢?

我们来举个例子:

public class day11code7 {
    public static void main(String[] args) {
        Name name=new Name("123");
        Name name1=new Name("234");
        name.equals(name1);
        System.out.println(name.hashCode());
        System.out.println(name1.hashCode());
    }
}
class Name {
    private String id;
    public Name(String id) {
        this.id = id;
    }
    public String toString(){
        return this.id;
    }
    public boolean equals(Object obj) {
        if (obj instanceof Name) {
            Name name = (Name) obj;
            return (id.equals(name.id));
        }
        return super.equals(obj);
    }
    public int hashCode() {
        Name name = (Name) this;
        return id.hashCode();
    }
}

 

这是最简单的一个改写equals(),如果两个字符串内容相同则返回true,否则返回false

但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是,但是~~~~(手麻了)但是分隔符

大家有没有听说过这样一句话:当此equals()方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

what????????这是什么情况??????万脸懵逼!!!!!!!

好的,小北来解释 一下:上图:

简单的解释就是如果你只改写了equals()方法而没有改写hashCode()那么就有可能导致存储两个值相同的对象

那么为什么要重写hashCode()呢?重写hashCode()是为了将数据存入hashSet(),hashMap(),hashtable()时进行比较

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值