第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

解答大家大部分疑惑

我也是小白,面對大家大部分問題,這是我的見解:(有點(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?,F(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é)果肯定是FALSE

4、第三個(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。


正在回答

7 回答

equals源碼是用==寫的,而==在比較引用類型的時(shí)候比較的是對象的內(nèi)存地址,即是否為同一對象,是就返回true,這里重寫equals為實(shí)現(xiàn)比較引用對象的內(nèi)容(如題即比較的是id和書名)

1 回復(fù) 有任何疑惑可以回復(fù)我~

第一點(diǎn)應(yīng)該是判斷兩個(gè)引用對象的值是否相等,就是判斷他們的地址是否相等

0 回復(fù) 有任何疑惑可以回復(fù)我~

第5點(diǎn)說到點(diǎn)上了,我就想知道equals方法內(nèi)部的equals是不是該重寫equals的方法遞歸

根據(jù)就近原則,只要方法名一樣,方法參數(shù)一樣,就調(diào)用該方法,顯然這里的不是方法的遞歸,那調(diào)用的就是String類的equals方法

0 回復(fù) 有任何疑惑可以回復(fù)我~

老妹 寫的太復(fù)雜了。。

0 回復(fù) 有任何疑惑可以回復(fù)我~

this==obj不是自己和自己比較

第4點(diǎn)太羅嗦啦

第5點(diǎn)不就是比較String嗎,太羅嗦啦

0 回復(fù) 有任何疑惑可以回復(fù)我~

太啰嗦了,有這么復(fù)雜嗎??

equals 的源碼就是在比較內(nèi)存地址

重寫就是為了不是比較內(nèi)存地址


0 回復(fù) 有任何疑惑可以回復(fù)我~

我就是樓主

3 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
Java入門第三季
  • 參與學(xué)習(xí)       409765    人
  • 解答問題       4543    個(gè)

Java中你必須懂得常用技能,不容錯(cuò)過的精彩,快來加入吧

進(jìn)入課程

解答大家大部分疑惑

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號