2013-04-06 130 views
-3

公共類TestDoubleEqualString {的java字符串比較

/** 
* @param args 
*/ 
public static void main(String[] args) { 


    String s1=new String("abc"); 
    String s2=new String("abc"); 


    System.out.println(s1.hashCode()); 
    System.out.println(s2.hashCode()); 



    System.out.println(s1==s2); 

    System.out.println(s1.equals(s2)); 


} 

}

//嗨,雖然我的s1.hashcode()和s2.hashCode()正在返回相同的值,那麼爲什麼S1 == S2是假的.....

在此先感謝

+4

今天發生了一些奇怪的事情。每個人都在重複這個問題。 – Maroun 2013-04-06 16:15:19

+0

很多人也在標記問題時跳過槍重複。例如,儘管我的s1.hashcode()和s2.hashCode()返回相同的值,但是爲什麼,這個比起簡單的'=='-vs-'equals()':有更深的誤解。 .. * – NPE 2013-04-06 16:18:22

回答

1

s1 == s2是假的,因爲==是比較字符串的引用,而不同,即使ŧ他兩個字符串的內容是相同的。要檢查字符串內容,請使用s1.equals(s2)

雖然我s1.hashcode()s2.hashCode()正在返回相同的值,那麼爲什麼s1==s2是假

採用==不談,這種邏輯是完全錯誤的。當兩個字符串具有相同的散列碼時,不可能從中推斷它們是否由相同的字符序列組成(或者實際上是相同的對象)。

+0

+1爲好解釋 – Maroun 2013-04-06 16:21:29

1

NPE已經回答了這一點,但我只想澄清 - 字符串是對象 - ==是說「這是同一個對象」,而字符串對象的文本比較對象內部的.equals方法