1.提出问题:
Map<String,String> map = new HashMap<String,String>();
map.put(new String("abcd"),"1234");
System.out.println(map.get(new String("abcd")));
如果输出的话,我觉得应该是NULL,因为new String("abcd")属于一个新对象,但结果是1234.
2.问题分析:
这里我们首先要搞明白的是,HashMap存储时是根据key的hashCode值通过hash算法得出其存储空间,所以不管你对象是否相同,如果你的hashCode数值一样,那你的存储空间位置就是相等的。
那么String str1=new String("abcd")和String str2=new String("abcd")中str1和str2的hashCode值是否相等呢?观察String对象的源码发现,其重写了Object父类的hashCode()方法,源码如下:
public int hashCode(){
int h = hash;
int len = count;
if (h == 0 && len > 0){
int off =