[原創]java中String類型是引用類型


"=="equals 方法究竟有什么區別?
==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存
儲的數值是否相同, 要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作
符。
如果一個變量指向的數據是對象類型的,那么,這時候涉及了兩塊內存, 對象本身占用一塊
內存( 堆內存),變量也占用一塊內存,例如 Objet obj = new Object();變量 obj 是一個內存,
new Object()是另一個內存,此時,變量 obj 所對應的內存中存儲的數值就是對象占用的那
塊內存的首地址。對於指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即
要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。
equals 方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相
同,它比較的兩個對象是獨立的。
String a=new String("foo");
String b=new String("foo");
兩條 new 語句創建了兩個對象,然后用 a/b 這兩個變量分別指向了其中一個對象,這是兩
個不同的對象,它們的首地址是不同的,即 a 和 b 中存儲的數值是不相同的,所以,表達
式 a==b 將返回 false,而這兩個對象中的內容是相同的,所以,表達式 a.equals(b)將返回
true。

 

java中String是引用數據類型

為什么String str="scce";
String str2="scce";
str==str2返回true而String str2=new String("scce"); str==str2返回false

 

String str="scce"; //這是在靜態數據區創建了一個對象
String str2="scce"; //創建靜態數據對象是先在靜態數據區查,如果存在則不創建新的,保證靜態數據區中的數據只有一份,

str==str2返回true //指向同一個對象
String str2=new String("scce"); str==str2返回false //在堆中創建一個對象,引用值當然不同

 

Stirng特殊在如果靜態數據區中存在,那么不創建新的對象,而是指向這個對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM