String類型中"=="和"equals"的區別


"=="比較的是兩個字符串的內存地址。  "equals"比較的是兩個字符串的實際值。

例子1.

String s1="abc";
String s2="abc";
if(s1.equals(s2)){
    System.out.println("兩個字符串值相等")
}
if(s1==s2){
     System.out.println("兩個字符串指向同一個內存地址");
}

此時輸出:兩個字符串值相等

     兩個字符串指向同一個內存地址

why:當給s2賦值abc時,s2會自動去尋找有沒有abc這個值得字符串。如果有,會copy  s1(包含內存地址)。如果沒有,再創建一個新內存地址。

例子2.

 

String s1="abc";
String s2=new String("abc")
if(s1.equals(s2)){
    System.out.println("兩個字符串值相等")
}
if(s1==s2){
     System.out.println("兩個字符串指向同一個內存地址");
}

 

此時輸出:兩個字符串值相等

why:s2創建了一個新對象,值為abc,與s1不再是同一個內存地址,所以只輸出:兩個字符串相等

例子3.

 

String s1="abc";
String s2=new String()
s2="abc";
if(s1.equals(s2)){
    System.out.println("兩個字符串值相等")
}
if(s1==s2){
     System.out.println("兩個字符串指向同一個內存地址");
}

 

此時輸出:兩個字符串值相等

     兩個字符串指向同一個內存地址

 

why: 雖然new了一個新對象,但沒有在此時給值,后來賦值的時候,仍是copy 了s1的內存地址。

例子4.

String s1="abc";
String s2=new String("abc");
s2=s2.intern();
if(s1.equals(s2)){
    System.out.println("兩個字符串值相等")
}
if(s1==s2){
     System.out.println("兩個字符串指向同一個內存地址");
}

此時輸出:兩個字符串值相等

      兩個字符串指向同一個內存地址

why: 調用了intern()方法,此時s2先去找有沒有abc,如果有,copy 內存地址,如果沒有,創建新的。

 


免責聲明!

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



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