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
如果abc
和abc2
不相等,那么为什么Hashmap
会覆盖值?
答案 0 :(得分:1)
Map
是一个存储(key/value
)(称为Entry
)元素的结构,keys
将unique
由于abc.equals(abc2)
为true
,abc2
将取代abc
要检查相等性,您需要使用.equals()
而不是==
作为参考
abc
和abc2
不一样object
(==
是false
)并且它们代表SAME字符串(.equals()
是{ {1}},因此只有一个可以在true
)
Map
答案 1 :(得分:0)
由于 abc.equals(abc2)
对于这些值始终为true
。
虽然 abc == abc2
的参考资料不一定是true
。
而且据说你将能够理解
map.put(abc, 2);
map.put(abc2, 1234); // overrides the previous value with the same key
答案 2 :(得分:-1)
String根据值生成散列,两个对象的键都相同,因此两个对象都指向相同的键(散列)&amp; 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;
}