if (this == obj) return true;

来源:9-9 Java 中的 Object 类 Ⅱ

qq__878

2015-07-30 19:35

老师说判断引用的值是否相等就是比较的地址是否相同(this==obj),可是地址不是应该不一样么?怎么说是指向同样地址,相当于指向同一个对象。

写回答 关注

2回答

  • 末日黑龙
    2015-08-01 11:20:50
    已采纳

    第一个问题:第一个地址是调用这个方法的对象的地址;另一个地址是这个方法中参数传递过来对象的地址。

    第二个问题:我觉得是你的equals理解的不够吧。拿手机来举例的话。

    一般我们说手机是否一样,是比较手机的型号、品牌、颜色、尺寸等等,如果一样的话,那么这就是2个一样的手机,对吧。比如你有个iphone5,我也有个iphone5,那咋俩的手机一样。

    但是在不重写equals方法的时候,原有方法认为2个手机一样的条件是,只能是同一部手机。这个条件比咱们需要的条件还苛刻,所以很多时候不适用。

    我们重写equals方法,第一句就先判断究竟是不是同一部手机,如果是肯定相等啊。如果不是,然后看他俩都是不是手机,如果一个是手机,一个是砖头肯定也不用比较了,肯定不相等。然后再看另一个存不存在(就是null),要是你都没有手机,咋俩也不用比了。。。如果咱俩都是手机,ok,开始比较手机的参数了。


    不知道你明白了没有。

    weixin...

    妙哉!!!

    2023-09-21 09:54:03

    共 3 条回复 >

  • 末日黑龙
    2015-07-30 20:25:46

    还是你啊,看来你很勤奋好学啊,加油共勉。

    程序里有的变量的地址值就是会相同的啊。

    比如Student s1=new Student();    //s1指向了一个新创建的对象

    Student s2=s1;        //这里的s2指向的就是s1啊,所以他俩的地址值肯定相同啊。

    当然,基本不会让2个变量总指向同一个地址值,否则他俩就没区别了。所以这也就是为什么很多时候需要重写equals的方法,就是不判断地址值,而是判断对象的所有属性值。

    ternen... 回复qq__87...

    不知道我理解的对不对,这里我们重写的equals方法,有四个if判断,第一个判断两个是否是同一个地址如果是就返回true,因为地址一样了他们就是同一个东西,第二个判断传进来的参数是否是空值,如果不是继续第三个判断,两个对象的类是否是一样的(就是老师说的类对象),然后因为是传进来的参数是object类,所以我们要强制把它转换成dog类,再进行最后的判断,他们所有的属性值是否是一样。

    2015-08-23 14:08:44

    共 3 条回复 >

Java入门第二季 升级版

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

530095 学习 · 6086 问题

查看课程

相似问题