关于equals方法重写

关于equals方法重写

原本的Cat类中的equals方法比较的仅仅是两个对象是否相等么?计较的是地址么?

重写equals方法中的this==obj是怎么实现判断对象是否相同的呢?obj是Object类,this难道不是Cat类么?

本案例重写equals方法的目的是不仅仅判断两个元素是否相等,还要判断对象内部属性是否相等。重写的方法中有必要进行第一步对象是否相同的判断么?不相同固然要进行下一步判断,但是如果相同的话其属性一定是一样的啊,因此去掉第一步判断应该不会对功能产生影响吧?如果不会对功能产生影响,那么写第一步判断是为了让计算机少进行运算么?

如果具体案例中已知集合原本元素与新加元素同属一类(Cat),是不是可以直接省略obj.getClass()==Cat.class这一步判断呢?obj.getClass()==Cat.class本身就是判断原本元素与新元素是不是同类的作用吧?

正在回答

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

1回答

1)、Cat类中equals方法比较的是对象是否相等,不是比较的地址。

2) this指代的是当前对象,obj指代的传入的对象,传入的对象也可以是Cat类型的,因为可以进行自动类型转化,所以可以传入Object的子类。

3)是的;如果相等就不需要再进行后面的代码了,因此可以提高运行效率;

4)重写equals方法不是只为一个案例使用的,如果有其他的代码也需要使用呢?因此还是不建议去掉的;obj.getClass()==Cat.class是用来判断是不是同类对象的。

建议你再学习一下这一小节。祝学习愉快~


  • 大佬金 提问者 #1
    1、我知道可以传入Cat类啊,但是obj终究是被转换成了Object类,this当前对象不是Cat类么,==左右两边不同类的啊, 还是说==判断对象是否相等仅仅是判断二者是否指向相同对象,二者本身的类没有影响呢? 4、如果为了多案例使用,可不可以把obj.getClass()==Cat.class改写成obj.getClass()==this.getClass()呢?
    2018-01-09 08:27:18
  • 一叶知秋519 回复 提问者 大佬金 #2
    1、==判定的是地址是否相等,就是是否指向同一个地址,同一个对象;2、obj.getClass()==Cat.class是用来判断是不是当前类的同类对象,只有是同类对象,才有进行后续属性的比较的必要,这个地方也可以是你说的obj.getClass()==this.getClass()。祝学习愉快~
    2018-01-09 10:31:15
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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