首先我們來(lái)介紹JVM中的記憶體分配知識(shí):
(推薦教學(xué):java課程)
在JVM中,記憶體分為堆疊記憶體跟棧記憶體。他們二者的差別是: 當(dāng)我們建立一個(gè)物件(new Object)時(shí),就會(huì)呼叫物件的建構(gòu)子來(lái)開(kāi)闢空間,將物件資料儲(chǔ)存到堆疊記憶體中,同時(shí)在堆疊記憶體中產(chǎn)生對(duì)應(yīng)的引用,當(dāng)我們?cè)卺崂m(xù)程式碼中呼叫的時(shí)候用的都是棧記憶體中的參考。還需注意的一點(diǎn),基本資料型別是儲(chǔ)存在棧記憶體中。
初步認(rèn)識(shí)equals與==的區(qū)別:
==是判斷兩個(gè)變數(shù)或?qū)嵗遣皇侵赶蛲粋€(gè)記憶體空間,equals是判斷兩個(gè)變數(shù)或?qū)嵗赶虻挠洃涹w空間的值是不是相同。 ==是指將記憶體位址進(jìn)行比較,equals()是對(duì)字串的內(nèi)容進(jìn)行比較。 ==指引用是否相同,?equals()指的是值是否相同。
用一張圖可以簡(jiǎn)單的表現(xiàn)他們之間的關(guān)係:
#測(cè)試:
equals與==的區(qū)別詳解:
== 比較的是變數(shù)(堆疊)記憶體中存放的物件的(堆疊)記憶體位址,用來(lái)判斷兩個(gè)物件的位址是否相同,即是否指相同一個(gè)物件。比較的是真正意義上的指標(biāo)操作。 equals用來(lái)比較的是兩個(gè)物件的內(nèi)容是否相等,由於所有的類別都是繼承自java.lang.Object類別的,所以適用於所有對(duì)象,如果沒(méi)有對(duì)該方法進(jìn)行覆蓋的話,調(diào)用的仍然是Object類別中的方法,而Object中的equals方法回傳的卻是==的判斷。
String s="abcd"是一種非常特殊的形式,和new 有本質(zhì)的差別。它是java中唯一不需要new 就可以產(chǎn)生物件的途徑。以String s="abcd";形式賦值在java中叫直接量,它是在常數(shù)池中而不是像new一樣放在壓縮堆中。
這種形式的字串,在JVM內(nèi)部發(fā)生字串拘留,即當(dāng)聲明這樣的一個(gè)字串後,JVM會(huì)在常數(shù)池中先查找有有沒(méi)有一個(gè)值為"abcd"的對(duì)象,如果有,就會(huì)把它賦給當(dāng)前引用.即原來(lái)那個(gè)引用和現(xiàn)在這個(gè)引用指點(diǎn)向了同一對(duì)象,?如果沒(méi)有,則在常數(shù)池中新創(chuàng)建一個(gè)"abcd",下一次如果有String s1 = " abcd";又會(huì)將s1指向"abcd"這個(gè)物件,即以這形式宣告的字串,只要值相等,任何多個(gè)引用都指向同一物件。
而String s = new String("abcd");和其它任何物件一樣.每呼叫一次就產(chǎn)生一個(gè)對(duì)象,只要它們呼叫。也可以這麼理解: String str = "hello"; 先在記憶體中找是不是有"hello"這個(gè)物件,如果有,就讓str指向那個(gè)"hello"。
如果記憶體裡沒(méi)有"hello",就建立一個(gè)新的物件儲(chǔ)存"hello". String str=new String ("hello") 就是不管記憶體裡是不是已經(jīng)有"hello"這個(gè)對(duì)象,都新建一個(gè)物件保存"hello"。
測(cè)試:
相關(guān)推薦:java入門
以上是詳細(xì)講解equals與==的區(qū)別的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)