equals與==的區(qū)別有哪些

這篇文章將為大家詳細講解有關equals與==的區(qū)別有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯成立與2013年,先為五原等服務建站,五原等地企業(yè),進行企業(yè)商務咨詢服務。為五原企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

首先我們來介紹一下JVM中的內存分配知識:

在JVM中,內存分為堆內存跟棧內存。他們二者的區(qū)別是: 當我們創(chuàng)建一個對象(new Object)時,就會調用對象的構造函數來開辟空間,將對象數據存儲到堆內存中,與此同時在棧內存中生成對應的引用,當我們在后續(xù)代碼中調用的時候用的都是棧內存中的引用。還需注意的一點,基本數據類型是存儲在棧內存中。

初步認識equals與==的區(qū)別:

==是判斷兩個變量或實例是不是指向同一個內存空間,equals是判斷兩個變量或實例所指向的內存空間的值是不是相同。==是指對內存地址進行比較,equals()是對字符串的內容進行比較。==指引用是否相同, equals()指的是值是否相同。

用一張圖可以簡要的表現他們之間的關系:

equals與==的區(qū)別有哪些

測試:

equals與==的區(qū)別有哪些

equals與==的區(qū)別詳解:

== 比較的是變量(棧)內存中存放的對象的(堆)內存地址,用來判斷兩個對象的地址是否相同,即是否是指相同一個對象。比較的是真正意義上的指針操作。equals用來比較的是兩個對象的內容是否相等,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對象,如果沒有對該方法進行覆蓋的話,調用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷。

String s="abcd"是一種非常特殊的形式,和new 有本質的區(qū)別。它是java中唯一不需要new 就可以產生對象的途徑。以String s="abcd";形式賦值在java中叫直接量,它是在常量池中而不是象new一樣放在壓縮堆中。

這種形式的字符串,在JVM內部發(fā)生字符串拘留,即當聲明這樣的一個字符串后,JVM會在常量池中先查找有有沒有一個值為"abcd"的對象,如果有,就會把它賦給當前引用.即原來那個引用和現在這個引用指點向了同一對象, 如果沒有,則在常量池中新創(chuàng)建一個"abcd",下一次如果有String s1 = "abcd";又會將s1指向"abcd"這個對象,即以這形式聲明的字符串,只要值相等,任何多個引用都指向同一對象。

而String s = new String("abcd");和其它任何對象一樣.每調用一次就產生一個對象,只要它們調用。也可以這么理解: String str = "hello"; 先在內存中找是不是有"hello"這個對象,如果有,就讓str指向那個"hello"。

如果內存里沒有"hello",就創(chuàng)建一個新的對象保存"hello". String str=new String ("hello") 就是不管內存里是不是已經有"hello"這個對象,都新建一個對象保存"hello"。

測試:

equals與==的區(qū)別有哪些

關于equals與==的區(qū)別有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

新聞標題:equals與==的區(qū)別有哪些
標題URL:http://muchs.cn/article10/jpejdo.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站制作網站營銷、手機網站建設、定制開發(fā)、面包屑導航網站策劃

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

微信小程序開發(fā)