java - 为什么这个 HashMap 被作为引用传递

标签 java hashmap

我有两个 HashMap 定义如下:

HashMap EventTable = new HashMap();
HashMap MainTable = new HashMap ();

现在,假设我将一些数据插入到 EventTable 中:

EventTable.put("name", "Test Event Name");

然后,假设我们将 EventTable 插入到 MainTable 中:

MainTable.put("table", EventTable);

然后打印出MainTable:

{table={name=Test Event Name}}

现在,如果我修改事件表如下:

 EventTable.put("more names", "More test events");

这也会更改 MainTable:

{table={more names=More test events, name=Test Event Name}}

很明显,EventTable 是通过引用 MainTable 来传递的。

我不明白为什么 EventTable 是通过引用传递的。

理想情况下,我想重用 EventTable HashMap 来创建其他条目,同时保留旧条目,因此我想按值传递 EventTable。

编辑:

忘记在主要问题中提及这一点,但是当我将字符串添加到 MainTable 时,当我之后修改字符串时,它不会改变。那么字符串的行为有何不同?

最佳答案

尽管我永远不会使用原始类型并遵循 Java 命名约定,但您可以执行以下操作来获得所需的行为:

mainTable.put("table", new HashMap(eventTable));
<小时/>

解决您的编辑问题:Java 中的字符串是不可变的。

关于java - 为什么这个 HashMap 被作为引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092098/

相关文章:

java - Tomcat 问题 : Unsupported major. 次要版本 52.0

java - cvc-elt.1 : Cannot find the declaration of element 'countries'

java - 使用 HashMap 的 put 方法时出现 NullPointerException

java - 我怎样才能在Java中拥有一个带有重复键的HashMap?

java - 从蓝牙加载大约30%的数据时,接收到30 MB数据大小时应用崩溃

java - 读者和作者 Java 解决方案查询(条件信号量 | 传递接力棒)

java - Java中HashMap和ArrayList的区别?

java - 比较两个 json 并从第一个 json java 返回唯一键

java - 如何对包含值映射的映射进行排序

java - 当java程序中遇到assert语句时,JVM内部在做什么?