2017-10-04 101 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)我认为现在没关系 –

相关问题