关于hashcode的比较有什么意义的提问

关于hashcode的比较有什么意义的提问

老师,既然hashcode是基于对象地址。那么在我们创建对象的时候,就不可能创建相同的对象。比如我们不可能创建两个引用名为huahua 的Cat类对象。既然不可能有相同的类对象,那么比较hashcode的意义在哪里?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小琪 2020-04-27 10:19:16

同学你好,重写后的hashCode就不是地址值了,hashCode是对各个属性的值进行某种计算,如果hashCode不一样的话,就不用调用equals方法去比较了,两个对象的属性值肯定是不同的,如果一样的话,属性值有可能会不同,我们还有需要在去比较equals方法,如果equals比较结果为false,比较的两个对象是不同的,如果equals比较结果为true,比较的两个对象才是相同的。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 也就是说,如果没有重写hashCode方法那返回的是另一个地址,重写之后返回的就是物理地址。在set进行add的时候自动调用hashCode方法,再通过底层根据重写之后的hashCode方法的返回值,定位到实际内存中的地址,如果那个地址有数据再调用equals比较,没数据就添加这个类到这个内存地址。是这样吗老师

    2021-02-24 14:27:26
  • 同学你好,重写hashcode后,对象的地址是指对象在hash表中的位置,并不是物理地址。使用set调用add方法进行添加时,会自动调用hashCode方法,如果HashCode值相同,则调用equals进行比较。如果不同,则直接添加。

    祝学习愉快~

    2021-02-24 16:54:09
苍星乱舞 2020-04-26 22:21:24

变量名和对象不是同一个意思,对象是在堆中,局部变量是在栈中,如果是引用类型变量,是将对象的地址赋值给变量,可能出现两个变量指向同一个对象的情况。

请采纳!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师