看完书上的理论,我想说自己练习看看,发现到试不出来,请各位指点:
这是原来的状况,
Map<String,List<String>> map1 = new HashMap<>();
List<String> aa = new ArrayList<>() ;
aa.add("a");
aa.add("b");
aa.add("c");
map1.put("1",aa);
for (Map.Entry<String, List<String>> entry : map1.entrySet()) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
//我把map跟bb物件互相参考
List<String> bb = map1.get("1");
bb.add("ss");
//查看了一下,hashcode一样,存储器位置一样
System.out.print("map1的hashcode "+map1.get("1").hashCode()+" bb的hashcode"+bb.hashCode()+"\n");
System.out.print("存储器位置一不一样??::"+ (bb == map1.get("1"))+"\n");
for(Map.Entry<String, List<String>> entry : map1.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
结果是:
1 [a, b, c]
map1的hashcode 126145 bb的hashcode126145
存储器位置一不一样??::true
1 [a, b, c, ss]
可是问题code在这边
Map<String,List<String>> map1 = new HashMap<>();
List<String> aa = new ArrayList<>() ;
aa.add("a");
aa.add("b");
aa.add("c");
map1.put("1",aa);
for (Map.Entry<String, List<String>> entry : map1.entrySet()) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
//我把map跟b物件互相参考
Integer b = new Integer(map2.get("1"));
System.out.print("存储器位置一不一样??:"+ (b == map2.get("1"))+"\n");
System.out.print("map2的hashcode "+map2.get("1").hashCode()+" b的hashcode"+b.hashCode()+"\n");
b = b+2;
for (Map.Entry<String, List<String>> entry : map1.entrySet()) {
System.out.println(entry.getKey()+" "+entry.getValue());
}
1 44
2 55
3 44
存储器位置一不一样??:false
map2的hashcode 44 b的hashcode44
1 44
2 55
3 44
结果不如我预期,因为我原本以为把他指定给物件Integer就可以像上述一样改变
结果居然有hashcode一样但存储器位置不一样的问题,实在不能理解为何会这样
请问是甚摸原因造成这样的结果呢??