static void checkString(String A,String B)
{
boolean result1=A.equals(B);
System.out.println(A+".equal("+B+") 結果爲:"+result1);
boolean result2=(A==B);
System.out.println(A+"=="+B+" 結果爲:"+result2);
}
public static void main(String args[])
{
checkString("ABC","ABC");
checkString(new String("ABC"),"ABC");
checkString(new String("ABC").intern(),"ABC");
}
結果爲:
ABC.equal(ABC) 結果爲:true
ABC==ABC 結果爲:true
ABC.equal(ABC) 結果爲:true
ABC==ABC 結果爲:false
ABC.equal(ABC) 結果爲:true
ABC==ABC 結果爲:true
equals比較的是2個對象的值;而“==”是比較2個對象的引用(內存地址);
程序在運行的時候會創建一個字符串緩衝池,當使用 B = "ABC" 這樣的表達是創建字符串的時候,程序首先會在這個String緩衝池中尋找相同值的對象,checkString("ABC","ABC");
中,String A ="ABC"先被放到了池中,所以在B被創建的時候,程序找到了具有相同值的 A,將 B 引用 A 所引用的對象"ABC";
第二個
checkString(new String("ABC"),"ABC");
中,使用了 new 操作符,創建一個新的"ABC" Sting對象被創建在內存中。A、B的值相同,但是位置不同,一個在緩衝池中,一個開闢了新的內存地址。
第三個
checkString(new String("ABC").intern(),"ABC");
intern()將開闢新地址的對象又遣返到緩衝池。