重写hashCode()和equals()方法的必要

本文阐述了在Java中为何及如何重写hashCode与equals方法,包括其在集合类如HashSet中的作用,以及如何正确实现这两个方法以确保对象的正确识别。

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

一、

重写hashCode方法的必要

1、String和Integer这些Java自带的类都重写了hashCode方法,如果String和Integer new出来的对象的内容是一样的,则这些对象的hashCode返回值也是一样的,尽管这些对象

 占用的是不同的内存。

 

2、不过用户自定义类型则不同,即便是两个内容一模一样的A类对象,它们返回的hashCode值也是不一样的,但是两个内容一模一样的Integer类对象或者String类对象返回的hashCode值却是一样的,因为系统自带的String和Integer类都己经重写了Object的hashCode方法嘛!

 

3、如果程序员希望自己定义的类对象,占用不同内存空间但内容却是一样的对象调用hashCode方法返回值是一样的,则程序员就必须自己重写hashCode方法。

 

 

二、

为什么要重写equals()和hashCode()方法

预备知识:

      散列码:  Object中的hashCode方法会返回该对象的内存真实地址的整数化表示,这个形象的不是地址的整数值就是哈希码。

    向HashSet中添加对象时,HashSet先通过该对象的hashGode()计算出相应的桶,然后再根据equals()方法找到相应的对象。

如果容器中己存在该对象则不再添加,如果不存在,则添加进去!

 

 

三、

怎样重写equals()和hashCade()方法

1、如何重写equals()

public boolean equals(Object obj)

{

          如果this和Obj的内容是一摸一样的

                    返回true

          否则

                    返回false

}

2、如何重写hashCode()方法

public int hashCode()

{

 

        return 当前类中基本类型数据对象的hashCode()方法

}

MyEclipse Source->有重写相关方法的快捷方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值