2013-04-12 148 views
-3

爲什麼下面的java代碼給出的答案爲:爲什麼這個Java代碼給出了不同的答案?

不等於
相等。

代碼:

String a=new String("abc"); 
    String b=new String("abc"); 
    String c="abc"; 
    String d="abc"; 


    if(a==b){ 
     System.out.println("equal"); 
    }else{ 
     System.out.println("not equal"); 
    } 

    if(c==d){ 
     System.out.println("equal"); 
    }else{ 
     System.out.println("not equal"); 
    } 

我很困惑,什麼是兩個語句

 String a=new String("abc"); 
     String c="abc"; 

在不同的方式?
簡而言之,這兩個作業有什麼區別?
任何幫助將不勝感激。
謝謝

+5

這已被問** **多次**之前。這裏是一個解釋:http://stackoverflow.com/a/334613/367273 – NPE

+1

你應該看看[String.intern()](http://docs.oracle.com/javase/6/docs/api/java /lang/String.html#intern%28%29)並仔細研究。 '所有文字字符串和字符串值常量表達式都被禁用。' – OldCurmudgeon

回答

3

當您直接使用字符串文字到初始化字符串變量時,Java將intern the Java literal string,以便這兩個字符串變量引用相同的實際字符串對象。

當您使用new運營商,你會得到一個不同的對象,即使新字符串的內容是一樣的字符串文字。

正如已多次指出,在==運算符比較對象引用,看看他們是否指向同一個對象,不比較字符串內容。

2

請勿使用==來比較字符串;使用equals()方法。

if(a.equals(b)) { 
    System.out.println("equal"); 
}else{ 
    System.out.println("not equal"); 
} 
+4

這並不能回答爲什麼它們第二次相等。 – 11684

+0

是的,它的確如此。它們是相同的參考,所以==返回true。 – duffymo

+0

沒有真正回答這個問題,但是是一個很好的建議:) – atamanroman

1

分配字符串文字將利用字符串池中(因此相同的附圖),荷蘭國際集團new字符串將總是創建新的實例,這導致不同的對象。

相關問題