Dictionary的add添加键值时是复制还是和原来的变量有关联?_(语言-java)

该问题来自社区帖: https://bbs.csdn.net/topics/615500503.为符合问答规范, 该问题经过ChatGPT优化
Dictionary<string, PluginsInfo> dic = new Dictionary<string, PluginsInfo>();
PluginsInfo pluginsInfo = new PluginsInfo();
pluginsInfo.Name = "2222";
dic.Add("2", pluginsInfo);
MessageBox.Show("对象本身: " + ReferenceEquals(pluginsInfo, dic["2"]).ToString());
MessageBox.Show("对象的参数: " + ReferenceEquals(pluginsInfo.Name, dic["2"].Name).ToString());

Dictionary<string, DataCell> dic2 = new Dictionary<string, DataCell>();
DataCell data = new DataCell();
data.DataValue = "www";
dic2.Add("2", data);
MessageBox.Show("对象本身: " + ReferenceEquals(data, dic2["2"]).ToString());
MessageBox.Show("对象的参数: " + ReferenceEquals(data.DataValue, dic2["2"].DataValue).ToString());
  • 以下回答由chatgpt基于相关博客总结生成:

    很抱歉,Java中的Dictionary类已经被废弃,在Java 1.2版本之后,使用Map代替了Dictionary类,Map是一个更通用的接口,提供类似于Dictionary类的键值映射,同时也支持更多的键值类型,例如字符串、对象等。但是不管是Dictionary还是Map,对于往其中添加键值的操作,都不是创建一个新的变量,而是与原有的变量产生关联。

    在Dictionary或Map中,添加键值的过程可以简述为以下几步:

    1. 创建一个键对象和一个值对象
    2. 使用键对象作为参数调用put方法,将值对象与键对象进行关联
    3. 如果之前已经存在了该键对象,put方法会将新的值对象与该键对象进行关联,并返回该键对象之前所关联的值对象
    4. 如果该键对象之前没有被关联任何值对象,则put方法会返回null

    以下是使用Java Map实现添加键值对的示例代码:

    Map<String, Integer> map = new HashMap<>(); // 创建一个Map对象
    map.put("apple", 10); // 添加键值对
    

    在这个示例中,首先创建了一个Map对象,然后通过put方法向其中添加一个键为"apple",值为10的键值对,此时"apple"和10这两个对象与这个Map对象产生了关联。如果再次调用put方法,使用"apple"这个键添加一个新的值,例如20,那么这时这个键"apple"和新的值20就会与之前的Map对象产生关联,而不是创建新的变量。