老师,关于比较的问题想确认下我的想法

老师,关于比较的问题想确认下我的想法

在老师的equals和==的视频里,我进一步认知了二者的区别;以下是我的理解:


1. 当调用的是父类的成员属性做equals比较时,不管是在父类创建判断方法还是在子


类创建判断方法,所引用的都是同一个地址进行比较,当重写equals为String 类型的


比较时,则比较的为内部的值,当用==做比较时,则比较是否是指向同一个地址。


2.关于数组类型做equals比较时,我发现不管是字符类型还是整型(双精度)类型,不


管内部的值是否一致,所返回的值都为false。 而用String s=new String("s")这种


方式做比较如果内部值为一样时,则返回true,反之为false。原因是因为String 


s=new String("s")这种方式相当于实例化了一个字符串对象,而数组类型并非对象,


所以不管怎么做比较都是比较地址是否相同。


3.关于成员属性返回值不同和数组返回值相同的原因,是因为成员属性是属于对象类型


,而数组并非对象类型,所以才会出现这种返回值情况;    


   (以上是我对二者的理解,烦请老师看下我的理解是否正确)


正在回答

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

2回答

同学你好, 在String 类中有重写equals方法,则String 类型的对象调用equals方法,对比的就是值。所以String类型的s与String类型的name属性,都可以调用equals方法对比值是否相等。

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

好帮手慕小尤 2020-09-17 10:27:16

同学你好,同学理解存在一点偏差,

  1.  对象之间的“==”比较是比较它们的内存地址是否相同,而基本数据类型的“==”比较的是值。

  2. 未重写的equals方法,默认比较的是两个对象的地址,而重写equals方法后,比较的是这两个对象中的属性(内容)。

  3. 数组是特殊的对象,当同学通过new实例化数组时,指向的是一个新的地址,所以当使用equals方法(数组无法通过equals方法对比数组中的内容)进行调用,则对比的就是两个数组地址,返回结果为false。与数组类型没有关系。如下所示:

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

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

  • 提问者 慕哥8310336 #1
    那老师,String s=new String("S"); 和this.getName(); 这二者都能用equals进行对比内部的值,那是不是这两者都是属于相同的对象重写类型?
    2020-09-17 12:10:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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