2013-07-31 41 views
-1

我有兩個字符串,一個是用戶輸入的,一個是線程的名稱。我輸入的名字應該與線程相同。爲了驗證這一點,我有計劃輸出(我認爲)相同的兩個字符串在檢查相同時是否返回true同樣的

System.out.println("DS:" + DeamonMain.threadNameFinal + "CN:" +getName()); 

它打印

DS:Thread-66CN:Thread-66 

現在,這些似乎是相同的字符串。然而,當我有測試此有效期使用

boolean factChecker = DeamonMain.threadNameFinal == getName(); 
System.out.println(factChecker); 

它打印假...

這是爲什麼?這是否與getName()有關?字符串如何不同以及爲什麼如此?

+3

這裏最常問的問題是? – iamnotmaynard

回答

2

您需要使用String.equals來比較String是否相等,而不是==符號。

如:

boolean factChecker = DeamonMain.threadNameFinal.equals(getName()); 

==操作者檢查引用相等,而對於你的String值的平等equals方法檢查。

另請參閱here關於此問題的較舊主題。

1

又一次,又一次......

字符串在Java中與equals()相比,而不是與==

更改您的比較:

boolean factChecker = DeamonMain.threadNameFinal.equals(getName()); 
0

您應該使用.equals()方法比較字符串,而不是==

boolean factChecker = DeamonMain.threadNameFinal.equals(getName()); 

的原因是.equals()試驗值相等(字符串有相同的字符),而==測試引用相等。

0

您需要使用equals()方法,而不是==

像這樣:

DeamonMain.threadNameFinal.equals(getName()) 
0

使用equals()的字符串對比,而不是==操作

boolean factChecker = DeamonMain.threadNameFinal.equals(getName()); 
    System.out.println(factChecker); 

equals()方法用於內容比較其中==是參考比較。

相關問題