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

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

6-1老師說(shuō)為什么name需要用equals()進(jìn)行比較

我實(shí)測(cè)了直接用==,不用equals()也是true是為什么

不是說(shuō)要用equals()比較兩個(gè)new好的字符串嗎?為什么各自字符串的值還能用==是true呢?

參考http://idcbgp.cn/code/2203與http://idcbgp.cn/video/3731

正在回答

1 回答

區(qū)別:

“==” 比較的是兩個(gè)引用在內(nèi)存中指向的是不是同一對(duì)象(即同一內(nèi)存空間),也就是說(shuō)在內(nèi)存空間中的存儲(chǔ)位置是否一致。

如果兩個(gè)對(duì)象的引用相同時(shí)(指向同一對(duì)象時(shí)),“==”操作符返回true,否則返回flase。

注:如果有對(duì)內(nèi)存分配及變量存儲(chǔ)位置(堆、棧、方法區(qū)常量池、方法區(qū)靜態(tài)區(qū))感興趣的可以去看看這篇博客,里面寫的很詳細(xì)。對(duì)我還在學(xué)基礎(chǔ)的人來(lái)說(shuō)幫助很大,理解了很多內(nèi)容,還有待消化。

?

equals方法是由Object類提供的,可以由子類來(lái)進(jìn)行重寫

Object類默認(rèn)的實(shí)現(xiàn)如下:

1?public?boolean?equals(Object?obj)?{2?3?????return?(this?==?obj);4?5?}

默認(rèn)的實(shí)現(xiàn)只有當(dāng)對(duì)象和自身進(jìn)行比較時(shí)才會(huì)返回true, 這個(gè)時(shí)候和 “==”是等價(jià)的。

Java中很多類(String類? Date類? File類)等都對(duì)equals方法進(jìn)行了重寫,這里拿常見(jiàn)的String類舉例。

復(fù)制代碼

?1?public?class?Test?{?2?????public?static?void?main(String[]?args)?{?3?????????String?str1?=?"abc";?4?????????String?str2?=?"abc";?5?????????System.out.println(str1==str2);//true?6??7??8?????????String?str3?=?new?String("abc");?9?????????String?str4?=?new?String?("abc");10?????????System.out.println(str3==str4);//false11?????????System.out.println(str3.equals(str4));//true12?????}13?}

復(fù)制代碼

上例中第5行,我們看到str1 == str2 的結(jié)果是true

分析原因:

先看第3行代碼,先在棧中創(chuàng)建一個(gè)對(duì) String類的對(duì)象引用變量str1,然后通過(guò)引用去字符串常量池 里找有沒(méi)有"abc",如果沒(méi)有,則將"abc"存放進(jìn)字符串常量池。這里常量池中并沒(méi)有“abc”。即在編譯期已經(jīng)創(chuàng)建好(直接用雙引號(hào)定義的)“abc”,存儲(chǔ)在了常量池中。(如果有對(duì)常量池不理解的可以看看我上面推薦的博客)

?

第4行代碼又創(chuàng)建了對(duì)String類的對(duì)象引用str2,然后通過(guò)引用去字符串常量池 里找有沒(méi)有"abc",如果沒(méi)有,則將"abc"存放進(jìn)字符串常量池 ,并令str2指向”abc”,如果已經(jīng)有”abc” 則直接令str2指向“abc”。這里我們?cè)诘谌写a中已經(jīng)將“abc”這個(gè)字符串存儲(chǔ)進(jìn)了常量池。所以str2和str1指向的是同一個(gè)“abc”,返回true。

?

第8行和第9行代碼分別創(chuàng)建了2個(gè)對(duì)象,str3和str4指向的是不同的對(duì)象,即上面所說(shuō)的內(nèi)存空間中存儲(chǔ)位置不同。故str3 == str4 返回的肯定是false。

?

第11行代碼 str3.equals(str4) 返回true

因?yàn)镾tring類重寫了equals方法,比較的是內(nèi)存空間存放的數(shù)據(jù)是否相同。這里存放的都是字符串“abc” 故返回true。

?

總結(jié):

Java 語(yǔ)言里的 equals方法其實(shí)是交給開發(fā)者去覆寫的,讓開發(fā)者自己去定義滿足什么條件的兩個(gè)Object是equal的。

所以我們不能單純的說(shuō)equals到底比較的是什么。你想知道一個(gè)類的equals方法是什么意思就是要去看定義。(以上是來(lái)自知乎用戶的回答)

我們要理解的是equals存在的目的。


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

慕無(wú)忌8817699 提問(wèn)者

我重啟了下好像好了
2019-11-14 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

6-1老師說(shuō)為什么name需要用equals()進(jìn)行比較

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

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

幫助反饋 APP下載

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

公眾號(hào)

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