案例描述
对Java中map的get方法有些模糊,下面的代码会返回value吗?
HashMap<String,String> map = new HashMap<String,String>();
String key1 = new String("key");
System.out.println("key1.hashCode()="+key1.hashCode());
String key2 = new String("key");
System.out.println("key2.hashCode()="+key2.hashCode());
System.out.println("key1==key2? "+(key1 == key2));
map.put(key1,"value");
System.out.println(map.get(key2));
结果是肯定的。
//output
key1.hashCode()=106079
key2.hashCode()=106079
key1==key2? false
value
原因
Map接口中的get()实现约定

Map接口中get()文字约定
假如map里有一个(k,v)映射,用key去查找
| key | (k,v) | 返回值 |
|---|---|---|
| null | (null,v) | v |
| null | (不为null,v) | null |
| 不为null | key.equals(k)为true | v |
| 不为null | key.equals(k)为false | null |
查看HashMap的源码

HashMap用key查找
HashMap在用key查找value时,如果遇到下列情况,返回节点(里面包含value)
1.key的引用值与map中key的引用值相等,返回该节点。
2.key不为空,并且key equals (节点的key) ,返回该节点。
其他关联知识
value相同的不同实例String,hashCode是相等得。

String的hashCode