2017-10-04 119 views
-2
String abc = "abc"; 
String abc2 = new String("abc"); 
System.out.println(abc == abc2); //false 
Map<String, Integer> map = new HashMap<String, Integer>(); 
map.put(abc, 2); 
System.out.println("map.get(abc)" + map.get("abc")); //2 
map.put(abc2, 1234); 
System.out.println("map.get(abc)" + map.get("abc")); //1234 

如果abcabc2是不相等的,那麼爲什麼Hashmap是壓倒一切的價值觀?爲什麼HashMap的被覆蓋現有的字符串鍵值

+2

'abc'和'abc2'是相等的!你沒有檢查第3行的均等性,但是它們是否是同一個對象。 'abc.equals(abc2)'是你如何檢查它們是否相等。 –

回答

0

由於abc.equals(abc2)對於這些值總是true

雖然abc == abc2不一定是true他們的參考。


而且這就是說,你應該能夠理解

map.put(abc, 2); 
map.put(abc2, 1234); // overrides the previous value with the same key 
1

一個Map是將存儲結構(key/value)(稱爲Entry)元素和地方keysunique

由於abc.equals(abc2)true,abc2將取代abc


要檢查平等,你需要使用.equals(),而不是==這是參考

abcabc2是不一樣的object==false),他們表示相同的字符串(.equals()true,和所以只有一個可以在Map

String abc = "abc"; 
String abc2 = new String("abc"); 
System.out.println(abc.equals(abc2)); //line 3 : true 
map.put(abc, 2);  
map.put(abc2, 1234);     //because of line 3 it will override precedent input (line 4) 
System.out.println(map.toString()); //[abc=1234] 
-1

字符串根據值,兩個對象的鍵值將相同,因此兩個對象都指向相同的鍵(散列)& abc.equals(abc2)是true因此,兩個對象都指向相同的條目。

String abc =「abc」; String abc2 = new String(「abc」);

public int hashCode() { 
    int h = hash; 
    if (h == 0 && value.length > 0) { 
     char val[] = value; 

     for (int i = 0; i < value.length; i++) { 
      h = 31 * h + val[i]; 
     } 
     hash = h; 
    } 
    return h; 
} 
+0

這甚至不是正確的答案。重要的是兩個字符串都是平等的! HashMap完全能夠處理具有相同哈希碼的多個不相等的對象:https://stackoverflow.com/questions/6493605/how-does-a-java-hashmap-handle-different-objects-with-the-same-hash-代碼 –

+0

我忘了添加abc.equals(abc2)我認爲現在沒關係 –

相關問題