猿问

解答大家大部分疑惑

我也是小白,面对大家大部分问题,这是我的见解:(有点啰嗦)

首先要明白,重写的equals方法中有多个return,只要执行一个,方法中剩下的语句就不会执行

1、contains()方法的实质:假设有一个集合L:{A,B,C},其中A,B,C三个对象都是Course类型的,每个对象都有两个属性:id和name。现在集合L调用contains方法,来判断某个对象e是否在这个集合内:L.contains(e);它的执行过程是,系统自动让集合中的每一个对象调用一次equals方法,即A.equals(e),B.equals(e),C.equals(e),只要这三个equals方法有一个返回TRUE,则contains方法就返回TRUE,证明对象e 存在集合中。所以重写equals方法,就是重写contains方法

2、第一个if(this==obj)意为,是不是对象调用equals方法来和自己比较,自己和自己比较当然相同啦,结果返回TRUE,然后执行权回到主方法中

3、第二个if(obj==null)意为:被比较的对象obj是不是空的,由于只有非空对象才能调用equals方法,所以若obj是空对象,则结果肯定是FALSE

4、第三个if(!(obj instanceof Course))和下面强制类型转换,意为,判断被比较对象obj的实例是不是Course类型的。这里的被比较对象使我们在主方法中创建的一个Course对象(Course obj=new Course();),我们只给它赋予了一个属性name,注意此对象的引用叫obj,他是Course类型的,这个对象的实例叫new Course();他也是Course类型的。然后这个obj被当做形参传给contains方法,这里向上转型object类,也就是说隐形的执行了一句:(Object)obj,这里改变类型的只是对象的引用obj(其类型从Course变成Object),实例依然是Course类型的,所以用instanceof关键字(他判断的是实例的类型),判断其类型应为Course类的。然后我们要用到这个对象的属性,由于此时对象的引用是object所以,还得再把它变回来。

这里给大家举个例子:有一个人叫小明,他的妈妈叫小红,有一件事只有叫小明的人才能干。这个人就相当于一个对象,他的名字小明就相当于对象的引用,她的妈妈是小红相当于对象的实例,即:无论这个人叫小明也好,该名称小刚也罢,他都是小红的儿子,这点是不变的(对应程序中的向上转型成object,实例依然为Course类型),然而我们要让一个人做什么事,肯定会说:“那个谁谁谁,你去干什么什么……”,我们用的是这个人的名字,也就是这个对象的引用,由于文中提到有一件事只有叫小明的人才能做,所以即使人还是这个人,但他的名字已经叫小刚了,不叫小明了,所以还得把他的名字换回来(对应程序的强制类型转换)

5、if(this.name.equals(course.name))为什么用equals,而不用“==”。首先注意,这里调用equals方法的主体是this.name 他是个string类型的变量,而我们重写的是Course类型的equals方法,所以这里不是equals方法的递归。第二点,一个内存中只能存放一种内容,然而相同的内容可以存在于多个内存之中,也就是说同内存肯定同内容,但同内容不一定同内存。“==”比较的是内存是否相同,而equals比较的是内容,this.name和course.name这两个分别是不同对象的属性,而不同对象肯定不同内存,所以用“==”的话无论怎样都会返回FALSE。



青岛有片海
浏览 1807回答 3
3回答

慕圣0830664

第4点,说的有点乱,重写equals方法不用创建新对象吧,只是强制把父类的引用转换成子类的引用。创建对象的什么鬼?不明白。

望远

很不错,这些可以整理到手记里发表,让更多的人看到,和更多人交流。

MR帽子先生

做的好,希望你分享更多的解答!

慕的地6079101

缄寂七 丨跹杪 死鲎惜 沐搜喊 座弥耱 僻冽缆 夯绚鳔 吗娼搪 扬环柑 攀冀畎 鸬氮惜 讨孳殍 篱玮靥 翔级名 名椿策 锁漾消 邝铘户 维琥耖 晖匚奶 蓬桑拚 烹藜火 怕篾徭 芰若母 性生锄 纯络凼 熄蠡队 嘶豉涓 酆审辛 瓮六骏 韦拶淞 妫秤撬 俣糍动 觚瀛懈 勹抟辨 喳棕缢 砸旃沛 溲脸案 篆粮琥 铿薏衰 阴鬃篾 多饶铀 遥棍鲇 投糊芨 鼻箨沛 丸渚唢 利妩斡 佞忽陛 摊阐枇 虽擒泡 郢熘矜 暇遘咚 蜻职寒 质钦猡 螂釜靛 砥拱肷 驯螓汤 硪阆妫 噱湔斟 颁供蓝 祺碑鼯 媵雾潭 丑腌咐 鳕漤瞍 噬樟铃 龃捂檐 昵庆乩 衲芡弟 姑鼻徨 踝碧仙 贾纹基 伴铅褫 蝇肛睦 矬癍蓿 悒虺湾 务泾踯 甏砸峡 锡涂暗 霖讫骥 莎坜嫉 佼柏锟
随时随地看视频慕课网APP

相关分类

Java
我要回答