在将值放入HashMap后更改值会更改HashMap中的内容?

2022-09-01 03:03:25

如果我创建了一个新的HashMap和一个新的列表,然后用一些任意键将列表放在Hashmap内,然后稍后调用它会影响我在HashMap中放置的内容吗?List.clear()

这里更深层次的问题是:当我向HashMap添加某些内容时,是复制并放置了新对象,还是放置了对原始对象的引用?

谢谢!


答案 1

这里发生的事情是,你在哈希映射中放置了一个指向列表的指针,而不是列表本身。

当您定义

List<SomeType> list;

您正在定义指向列表的指针,而不是列表本身。

当您这样做时

map.put(somekey, list);

您只是存储指针的副本,而不是列表。

如果在其他地方,您跟随该指针并在其末尾修改对象,则持有该指针的任何人仍将引用相同的已修改对象。

有关 Java 中按值传递的详细信息,请参阅 http://javadude.com/articles/passbyvalue.htm


答案 2

Java 是按值逐引用传递的。

将列表添加到哈希映射只是添加对哈希映射的引用,该引用指向同一列表。因此,直接清除列表确实会清除您在哈希映射中引用的列表。