equals重写问题

equals重写问题

主方法

https://img1.sycdn.imooc.com//climg/6236e0b409e94bdb12210498.jpg

父类重写方法

https://img1.sycdn.imooc.com//climg/6236e10309292ada11950417.jpg

问题描述:

我让两个对象引用去比为啥出错

https://img1.sycdn.imooc.com//climg/6236e13c09835f0a15210727.jpg

但是我这么比就不出错了,不太理解

https://img1.sycdn.imooc.com//climg/6236e19609a6f27410760678.jpg

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

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

1回答
好帮手慕小蓝 2022-03-20 16:30:05

同学你好,这个错误是因为代码中的equals方法不断调用自身导致的,如下图:

https://img1.sycdn.imooc.com//climg/6236e5aa09315da005680268.jpg

如果同学想要对比两个对象的引用是否指向同一个对象,这里应当使用“==”号。

祝学习愉快~

  • 提问者 軍度 #1

    为啥?不太懂,

    比较两个引用是否指向同一个对象不是boolean flag=one.equals(two);

    重写后不就是this.equals(obj);只是为啥报错啊

    2022-03-21 08:35:10
  • 好帮手慕小蓝 回复 提问者 軍度 #2

    同学你好,这里首先要明确两个对比对象的方式之间的区别:

    1. “==”号用于对比两端的数值是否相同:如果两端为基本类型,那么对比数值。如果两端为对象类型,那么对比地址是否相同。(地址用于判断引用是否指向同一个对象)

    2. equals方法仅仅可用于对比两个对象:如果对象类中没有重写过equals方法,那么使用Object类中的equals实现,功能与“==”号一致,对比两个对象的地址是否相同。如果对象类中重写过equals方法,则根据重写时的逻辑对比两个对象的内容是否相同。

    综上所述,这里重写的目的是对比两个对象的内容是否相同,但是需要先判断是否是同一个对象自己和自己对比的情况,那么此处就应当使用“==”对比地址是否一致。

    另外,同学这里报错是因为equals方法中再次调用自身equals方法,而自身equals方法还会调用自身equals方法,无穷无尽的的递归调用。

    祝学习愉快~

    2022-03-21 10:15:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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