3-8:hashcode equals

3-8:hashcode equals

http://img1.sycdn.imooc.com//climg/5e21609009ed18fe05820209.jpg

1:add方法会隐式调用hashcode,equals,怎么个调用法:huahua01.hashCode();?this.equals(huahua1);?

2:hashCode//只进行分类,不管是自己定义的还是系统定义的类?它不判断?还是它只判断对象是否引用同一块内存空间?相同就不会进行equals,不同就要equals,系统定义的类不用重写equals,自己写的要重写,

http://img1.sycdn.imooc.com//climg/5e2162180914ee6309630275.jpg

3:this==obj, obj是子类向上转型后的吧,==进行地址判断是否一样,this是set里面的对象经过hashcode分类后,在一个类里面的对象?

4.

正在回答

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

2回答

同学你好,是老师没有理解同学的意思。给您的学习带来不便,深感抱歉!equals(Object obj)是进行向上转型,在equals()方法中调用obj时需要进行向下转型(如:Cat cat=(Cat)obj)。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小脸 2020-01-17 17:06:24

同学你好,

    1、添加的时候会进行的底层的调用,先调用hashCode方法比较,如果hashCode相同 ,再调用equals方法比较 ,如果hashCode不同,说明不是一个对象,可以直接添加 

    2、同学的理解有些偏差,hashCode也是用来判断的,如果两个对象的hashCode是相同的,则进行equals详细的判断,但是,如果比较两个对象的hashCode不相等,说明这两个对象一定不同。就没有必要进行equals判断了。

如果老师理解错了同学的意思,还请同学在详细描述一下

    3、obj并不是子类向上转型后的,==是判断地址是否一样,同学理解有误this代表当前对象,是表示调用equals方法的这个当前对象,而不是传进去比较的对象

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 明月_0 #1
    1.hashcode是判断地址是否相同,不同就不用调用 2.this是当前对象也就是add添加的对象,obj是集合分类后的对象,视频里集合按hashcode进行分类,如果分成3份,obj是其中的3分之一吧,集合里面存放的是类,那么object是所有的父类,哪这里obj是不是进行向上转型,毕竟后面还有个强转(向下转型)
    2020-01-17 18:21:12
  • 好帮手慕小脸 回复 提问者 明月_0 #2
    同学你好,这里的obj不是进行向上转型,这个obj是要与当前对象比较的对象(当前情景中,这三分之一中又分为好几个对象,分别与要添加的这个进行比较,obj就是好几个中其中一个对象)。 首先我们来判断它的地址是否相同,如果相同,则肯定是一个对象,直接返回true,如果不同,我们再强转为当前对象一样的类,进行各个属性直接的比较。如果各个属性都一样,我们也让其返回true (另外,集合中存放的是对象,不是类哦。) 如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
    2020-01-17 19:07:01
  • 提问者 明月_0 回复 好帮手慕小脸 #3
    equals(Object obj),这是Object对象。。这不就相当于Cat huahua2=new Cat();Object obj=huahua2; 没理解到?。。。
    2020-01-17 19:45:50
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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