我有两个HashMaps定义如下:
HashMap EventTable = new HashMap();
HashMap MainTable = new HashMap ();
Run Code Online (Sandbox Code Playgroud)
现在,假设我在EventTable中插入了一些数据:
EventTable.put("name", "Test Event Name");
Run Code Online (Sandbox Code Playgroud)
然后,假设我们将EventTable插入MainTable:
MainTable.put("table", EventTable);
Run Code Online (Sandbox Code Playgroud)
然后打印出MainTable:
{table={name=Test Event Name}}
Run Code Online (Sandbox Code Playgroud)
现在,如果我按如下方式修改事件表:
EventTable.put("more names", "More test events");
Run Code Online (Sandbox Code Playgroud)
这也改变了MainTable:
{table={more names=More test events, name=Test Event Name}}
Run Code Online (Sandbox Code Playgroud)
显然,EventTable是通过引用MainTable传递的.
我不明白为什么EventTable被引用传递.
理想情况下,我想重用EventTable HashMap来创建其他条目,同时保留我的旧条目,所以我想按值传递EventTable.
编辑:
忘了在主要问题中提到这一点,但是当我向MainTable添加一个String时,我在之后修改字符串时不会改变.那么String的行为有何不同?
虽然我永远不会使用原始类型并遵循Java命名约定,但您可以执行以下操作来获得所需的行为:
mainTable.put("table", new HashMap(eventTable));
Run Code Online (Sandbox Code Playgroud)
解决您的编辑问题:字符串在Java中是不可变的.