==操做符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存
儲的數值是否相同, 要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操做
符。
若是一個變量指向的數據是對象類型的,那麼,這時候涉及了兩塊內存, 對象自己佔用一塊
內存( 堆內存),變量也佔用一塊內存,例如 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
java中String是引用數據類型
1.爲何String str="scce";
String str2="scce";
str==str2返回true而String str2=new String("scce"); str==str2返回falsepost
答:spa
String str="scce"; //這是在靜態數據區建立了一個對象
String str2="scce"; //建立靜態數據對象是先在靜態數據區查,若是存在則不建立新的,保證靜態數據區中的數據只有一份,
str==str2返回true //指向同一個對象
String str2=new String("scce"); str==str2返回false //在堆中建立一個對象,引用值固然不一樣對象
Stirng特殊在若是靜態數據區中存在,那麼不建立新的對象,而是指向這個對象。blog
2.那麼爲何:
String str="scce";
String str2=new String("scce");
str.equals(str2)爲true呢內存
答:it
由於String從新了equals方法class