博主是在最近无意中碰到这个问题的,新手,花了一点儿时间,记录一下
博主举得这个例子是 list的
一、List
List<Map> map = new ArrayList<Map>();
Map<String,Object> map2 =new HashMap<String, Object>();
while(rs.next()){
id = rs.getString("id");
name = rs.getString("name");
map2.put("id", id);
map2.put("name", name);
map.add(new HashMap<String, Object>(map2));
}
list 循环添加数值不会出现覆盖的情况,但是添加对象就会出现数据被覆盖的情况,需要在循环中new一次对象才行,这是为什么呢
这么说吧,当使用 List<Map> 时,如果Map是引用类型,保存的是引用,如果是值类型,保存的是值本身。
当Map是引用类型时,在循环外边已经new了一个对象,相当于这个对象的地址在内存空间已经开辟出来了,保存到了固定的位置,这时候我们使用add方法时,会增加值的个数,但引用地址不变,所以后面的值会覆盖掉前面的值,因此需要在循环中new一次对象
当Map是值类型时,值类型用来保存一组不会改变的量,当我们需要使用这个对象时,会在系统中开辟另一个空间。因此,值对象使用add方法时不会出现覆盖问题。
引用博客:https://blog.csdn.net/qq_39598417/article/details/78934015