java中==與equals的區別及詳解


java中==與equals的區別及詳解

區別:

1、“==” 是判斷兩個變量或實例是不是指向同一個內存空間,equals是判斷兩個變量或實例所指向的內存空間的值是不是相同

2、“==” 是指對內存地址進行比較 , equals()是對字符串的內容進行比較

3、“==” 指引用是否相同, equals()指的是值是否相同

equals與==的區別詳解:

== 比較的是變量(棧)內存中存放的對象的(堆)內存地址,用來判斷兩個對象的地址是否相同,即是否是指相同一個對象。比較的是真正意義上的指針操作。equals用來比較的是兩個對象的內容是否相等,由於所有的類都是繼承自java.lang.Object類的,所以適用於所有對象,如果沒有對該方法進行覆蓋的話,調用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷。String s="abcd"是一種非常特殊的形式,和new 有本質的區別。它是java中唯一不需要new 就可以產生對象的途徑。以String s="abcd";形式賦值在java中叫直接量,它是在常量池中而不是象new一樣放在壓縮堆中。 這種形式的字符串,在JVM內部發生字符串拘留,即當聲明這樣的一個字符串後,JVM會在常量池中先查找有有沒有一個值為"abcd"的對象,如果有,就會把它賦給當前引用.即原來那個引用和現在這個引用指點向了同一對象, 如果沒有,則在常量池中新創建一個"abcd",下一次如果有String s1 = "abcd";又會將s1指向"abcd"這個對象,即以這形式聲明的字符串,只要值相等,任何多個引用都指向同一對象.


分享到:


相關文章: