举例:
Map map = new HashMap();
Student st = new Stundet();
st.setName("AAA");
map.put("123",st);
st.setName("BBB");
map.put("456",st);
for (Map.Entry entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue().getName());
}
输出结果:
key= 123 and value= BBB
key= 456 and value= BBB
求大神讲解,为什么会被冲掉了
是因为你的st对象,你修改了它的值,它是引用类型,每次修改就会更新,如果你不想冲掉,就每次添加前,都要重新new一个对象出来
每次修改值就会更新,对象属性会被冲掉
结果是正确的,可以用指针的思想来理解。第一次map.put("123",st);你保存的st是Student对象的一个引用(或者说地址),此时虽然此时st的name是AAA,但是它并没有记录name的信息(只记录st的引用);
st.setName("BBB");之后,st的name就变为“BBB“,也就是你通过getkey(”123")获取的st的name变为了"BBB“
因为st是一个引用,就当与一个门派号,你放到map里的只是这个门派号,所以只要访问到这个门派号,就是取这个门里的值。每次修改,也是修改这个门里的值,
楼主这个问题是java里的一个常见的问题:值传递和引用传递,对象的属性赋值属于引用传递,如果楼主不了解的话,建议百度详细了解一下
同一对象每次更新它属性后,对象属性当然会被冲掉,但是引用变量st指向的堆内存中的地址没有变。
还有定义引用变量map时,最好指定泛型类型:Map map = new HashMap();