在开发时需要对表数据进行处理 写了以下代码:
却发现在执行name.put后,明明没有对List对象listname进行操作她却有了数据,导致后续逻辑报错(断点测试图在文章末尾)
再用以下代码进行测试:
public static void main(String[] args) {
List<Map> list = new ArrayList();
Map map = new HashMap();
list.add(map);
map.put("aa", 11);
map.put("bb", 11);
map.put("cc", 11);
list.forEach(m->System.out.println(m));
}
输出结果:
经过上网搜索得知原因:
map除了基本类型是正儿八经的值传递,其余的都是引用地址传递
由于map的value存储的引用地址传递(list),所以当list对象的内部属性发生改变时,map中的value随着改变