为了账号安全,请及时绑定邮箱和手机立即绑定

关于重写equal方法的一个疑问

有个疑问,重写equals方法后,总是返回一个true值,也就是说无论怎么比较他都是true值,并不是两个对象指向同一个内存空间了,那么比较还有什么意义呢。

正在回答

6 回答

你理解的IF有问题,IF是当判断条件满足时输出返回值;

所以,老师的语句理解起来就是;

1(this==obj)判断两个对象是否指向同一对象,若是则不用后续判断直接输出 true;2.当前面条件不成立时(this和obj指向不同的地址)进行判断(obj==new)是否成立,若成立则不需要后续判断直接输出 false(因为你不是傻傻的在空的对象里去和空对象判断吧)3.当前面IF不成立时执行(getClass!=obj.getClass),若if成立则直接输出 false(属性的数量和类别都不同就不用考虑值是否相同了,走的路都不一样你还想两个人的人生一样吗?)4.若前面if不成立则将obj转化为dog确认(age!=other)是否成立(若前面if不成立则说明是不同的地址,且obj对象不是空的,且两个对象的类型一致)若成立输出false;若不成立恭喜你满足以上条件就可以定论两个对象的属性值一样还是指向不同的地址!

纯手打,满意给个最佳答案。0.0

1 回复 有任何疑惑可以回复我~

应该是理解不同吧,可能那个重写只是将equals的方法的功能换成判断两个对象的值是不是相同!并没有说让两个对象指向同一个地址!

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//57cc30de000135cc03270241.jpg这是我截图老师的代码,图中画红圈的true改成false后在运行结果就是打印出两个对象是不同的,也就是说方法重写只是将equal方法返回值改了而不是让两个对象指向同一个地址

0 回复 有任何疑惑可以回复我~

截图在哪,没看到啊


0 回复 有任何疑惑可以回复我~
#1

陆星崖 提问者

刚发。。。
2016-09-04 回复 有任何疑惑可以回复我~

你这样的疑问我想想不出来你的错误在哪里,想看你的代码然后再可以一起帮你探讨下

0 回复 有任何疑惑可以回复我~
#1

陆星崖 提问者

谢谢,我截图发在下面了
2016-09-04 回复 有任何疑惑可以回复我~

你确定怎么比较都是true?会不会是你代码有问题?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530629    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

关于重写equal方法的一个疑问

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信