老师可以根据这个情况举个例子吗?

老师可以根据这个情况举个例子吗?

老师,因为我觉得this==obj,不就是说id,name,singer属性都相等吗?感觉第二个条件obj.getClass()==Song.class,好像一样的感觉。老师可以举个例子,不满足this.obj,而满足后面那个判断条件的例子吗

正在回答 回答被采纳积分+1

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

2回答
好帮手慕阿园 2020-09-05 18:36:12

同学你好,可以这么理解,当有两个对象song1和song3时,song1:s001,小太阳,两只老虎;song3:s001,小太阳,两只老虎;

当判断song1.equals(song3)

在equals方法中,先比较this=obj,this指的是当前对象,也就是song1,参数obj是song3,所以先比较song1==song3,如果这两个对象的地址相等,就直接返回true;如果不相等,就继续向下执行

判断(obj.getClass()==Song.class),也就是song3.getClass==song.class,如果相等,就继续执行接下来的代码,进行强转,不相等就返回flase

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


好帮手慕阿园 2020-09-05 18:05:41

同学你好,if(this==obj){return true;}中this==obj是比较这两个对象的地址,如果地址相等,这两个对象肯定相等,那么就直接返回true,不执行下面的语句

而getClass()方法与class是获取该对象的class(类),if (obj.getClass() == Song.class)是判断参数obj的class与Song类的class是否相等

要先判断两者的Class是否相等,相等的话才能将Object对象转换为Song对象,然后对对象进行比较。否则不能将Object对象转换为Song对象,运行时会报错

比如

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

song1和song3就符合同学所说的,这两个对象地址不相等,但是传过来的参数song3的class跟song的class是相等的,因为他属于song类的实例;如果这时传一个其他类的实例,比如cat或者dog,这时就不满足第二个条件,无法进行强制转换

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


  • 提问者 慕粉6099588 #1
    老师,例如song1:s001,小太阳,两只老虎;song3:s001,小太阳,两只老虎。这样理解的话是否this==obj指的是同一个实例,指的是song1==song1的情况,而判断class和属性相等就指的是song1==song3这种情况?
    2020-09-05 18:11:01
  • 星岳神话 回复 提问者 慕粉6099588 #2

    this==obj 判断是否指向同一内存地址,地址相同对象肯定相同

    this.getClass==obj.class 判断是否是同一类型,在指向不同内存地址的情况下,是同一类型则要根据3个属性进一步比较是否是同一对象。

    2021-08-04 20:57:12
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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