问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

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

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

提问者:陆星崖 2016-09-04 21:46

个回答

  • qq_淤泥_0
    2017-02-21 14:15:28

    你理解的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

  • 萌叔叔
    2016-09-13 22:51:09

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

  • 陆星崖
    2016-09-04 22:36:38

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

  • qq_柯南vs工藤新一vs怪盗_0
    2016-09-04 22:34:58

    截图在哪,没看到啊


  • qq_柯南vs工藤新一vs怪盗_0
    2016-09-04 22:34:17

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

  • 慕侠5503974
    2016-09-04 22:21:46

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