我也是小白,面對大家大部分問題,這是我的見解:(有點(diǎn)啰嗦)首先要明白,重寫的equals方法中有多個(gè)return,只要執(zhí)行一個(gè),方法中剩下的語句就不會(huì)執(zhí)行1、contains()方法的實(shí)質(zhì):假設(shè)有一個(gè)集合L:{A,B,C},其中A,B,C三個(gè)對象都是Course類型的,每個(gè)對象都有兩個(gè)屬性:id和name。現(xiàn)在集合L調(diào)用contains方法,來判斷某個(gè)對象e是否在這個(gè)集合內(nèi):L.contains(e);它的執(zhí)行過程是,系統(tǒng)自動(dòng)讓集合中的每一個(gè)對象調(diào)用一次equals方法,即A.equals(e),B.equals(e),C.equals(e),只要這三個(gè)equals方法有一個(gè)返回TRUE,則contains方法就返回TRUE,證明對象e 存在集合中。所以重寫equals方法,就是重寫contains方法2、第一個(gè)if(this==obj)意為,是不是對象調(diào)用equals方法來和自己比較,自己和自己比較當(dāng)然相同啦,結(jié)果返回TRUE,然后執(zhí)行權(quán)回到主方法中3、第二個(gè)if(obj==null)意為:被比較的對象obj是不是空的,由于只有非空對象才能調(diào)用equals方法,所以若obj是空對象,則結(jié)果肯定是FALSE4、第三個(gè)if(!(obj instanceof Course))和下面強(qiáng)制類型轉(zhuǎn)換,意為,判斷被比較對象obj的實(shí)例是不是Course類型的。這里的被比較對象使我們在主方法中創(chuàng)建的一個(gè)Course對象(Course obj=new Course();),我們只給它賦予了一個(gè)屬性name,注意此對象的引用叫obj,他是Course類型的,這個(gè)對象的實(shí)例叫new Course();他也是Course類型的。然后這個(gè)obj被當(dāng)做形參傳給contains方法,這里向上轉(zhuǎn)型object類,也就是說隱形的執(zhí)行了一句:(Object)obj,這里改變類型的只是對象的引用obj(其類型從Course變成Object),實(shí)例依然是Course類型的,所以用instanceof關(guān)鍵字(他判斷的是實(shí)例的類型),判斷其類型應(yīng)為Course類的。然后我們要用到這個(gè)對象的屬性,由于此時(shí)對象的引用是object所以,還得再把它變回來。這里給大家舉個(gè)例子:有一個(gè)人叫小明,他的媽媽叫小紅,有一件事只有叫小明的人才能干。這個(gè)人就相當(dāng)于一個(gè)對象,他的名字小明就相當(dāng)于對象的引用,她的媽媽是小紅相當(dāng)于對象的實(shí)例,即:無論這個(gè)人叫小明也好,該名稱小剛也罷,他都是小紅的兒子,這點(diǎn)是不變的(對應(yīng)程序中的向上轉(zhuǎn)型成object,實(shí)例依然為Course類型),然而我們要讓一個(gè)人做什么事,肯定會(huì)說:“那個(gè)誰誰誰,你去干什么什么……”,我們用的是這個(gè)人的名字,也就是這個(gè)對象的引用,由于文中提到有一件事只有叫小明的人才能做,所以即使人還是這個(gè)人,但他的名字已經(jīng)叫小剛了,不叫小明了,所以還得把他的名字換回來(對應(yīng)程序的強(qiáng)制類型轉(zhuǎn)換)5、if(this.name.equals(course.name))為什么用equals,而不用“==”。首先注意,這里調(diào)用equals方法的主體是this.name 他是個(gè)string類型的變量,而我們重寫的是Course類型的equals方法,所以這里不是equals方法的遞歸。第二點(diǎn),一個(gè)內(nèi)存中只能存放一種內(nèi)容,然而相同的內(nèi)容可以存在于多個(gè)內(nèi)存之中,也就是說同內(nèi)存肯定同內(nèi)容,但同內(nèi)容不一定同內(nèi)存?!?=”比較的是內(nèi)存是否相同,而equals比較的是內(nèi)容,this.name和course.name這兩個(gè)分別是不同對象的屬性,而不同對象肯定不同內(nèi)存,所以用“==”的話無論怎樣都會(huì)返回FALSE。
3 回答
已采納

慕圣0830664
TA貢獻(xiàn)41條經(jīng)驗(yàn) 獲得超26個(gè)贊
第4點(diǎn),說的有點(diǎn)亂,重寫equals方法不用創(chuàng)建新對象吧,只是強(qiáng)制把父類的引用轉(zhuǎn)換成子類的引用。創(chuàng)建對象的什么鬼?不明白。

慕的地6079101
TA貢獻(xiàn)3593條經(jīng)驗(yàn) 獲得超1個(gè)贊
緘寂七
丨躚杪
死鱟惜
沐搜喊
座彌耱
僻冽纜
夯絢鰾
嗎娼搪
揚(yáng)環(huán)柑
攀冀畎
鸕氮惜
討孳殍
籬瑋靨
翔級名
名椿策
鎖漾消
鄺铘戶
維琥耖
暉匚奶
蓬桑拚
烹藜火
怕篾徭
芰若母
性生鋤
純絡(luò)凼
熄蠡隊(duì)
嘶豉涓
酆審辛
甕六駿
韋拶淞
媯秤撬
俁糍動(dòng)
觚瀛懈
勹摶辨
喳棕縊
砸旃沛
溲臉案
篆糧琥
鏗薏衰
陰鬃篾
多饒鈾
遙棍鲇
投糊芨
鼻籜沛
丸渚嗩
利嫵斡
佞忽陛
攤闡枇
雖擒泡
郢熘矜
暇遘咚
蜻職寒
質(zhì)欽玀
螂釜靛
砥拱肷
馴螓湯
硪閬媯
噱湔斟
頒供藍(lán)
祺碑鼯
媵霧潭
丑腌咐
鱈漤瞍
噬樟鈴
齟捂檐
昵慶乩
衲芡弟
姑鼻徨
踝碧仙
賈紋基
伴鉛褫
蠅肛睦
矬癍蓿
悒虺灣
務(wù)涇躑
甏砸峽
錫涂暗
霖訖驥
莎壢嫉
佼柏錕
添加回答
舉報(bào)
0/150
提交
取消