在将值放入HashMap后更改值会更改HashMap中的内容?
2022-09-01 03:03:25
如果我创建了一个新的HashMap和一个新的列表,然后用一些任意键将列表放在Hashmap内,然后稍后调用它会影响我在HashMap中放置的内容吗?List.clear()
这里更深层次的问题是:当我向HashMap添加某些内容时,是复制并放置了新对象,还是放置了对原始对象的引用?
谢谢!
如果我创建了一个新的HashMap和一个新的列表,然后用一些任意键将列表放在Hashmap内,然后稍后调用它会影响我在HashMap中放置的内容吗?List.clear()
这里更深层次的问题是:当我向HashMap添加某些内容时,是复制并放置了新对象,还是放置了对原始对象的引用?
谢谢!
这里发生的事情是,你在哈希映射中放置了一个指向列表的指针,而不是列表本身。
当您定义
List<SomeType> list;
您正在定义指向列表的指针,而不是列表本身。
当您这样做时
map.put(somekey, list);
您只是存储指针的副本,而不是列表。
如果在其他地方,您跟随该指针并在其末尾修改对象,则持有该指针的任何人仍将引用相同的已修改对象。
有关 Java 中按值传递的详细信息,请参阅 http://javadude.com/articles/passbyvalue.htm。
Java 是按值逐引用传递的。
将列表添加到哈希映射只是添加对哈希映射的引用,该引用指向同一列表。因此,直接清除列表确实会清除您在哈希映射中引用的列表。