java - 了解 Java 集合中的 Java 引用

标签 java list hashmap

我无法理解一些与列表和 map 相关的简单代码。以下面的代码为例:

public class test {

private Map<Integer, List<String>> myMap ;

public test(){
    myMap = new HashMap<Integer, List<String>>();
}

public void addToMap(String ss){

    List<String> myTemp = myMap.get(ss);
    Random  r = new Random();
    if(myTemp == null){

        myTemp = new ArrayList<String>();
        myMap.put(r.nextInt(100), myTemp);
    }

    myTemp.add(ss);

}

public Map<Integer, List<String>> getMap1(){
    return myMap;
}


public  static void main(String args[]){

    test myTest = new test();
    myTest.addToMap("abdc");
    myTest.addToMap("eeer");
    System.out.println(myTest.getMap1());

}

}

addToMap() 究竟如何向 mylist Map 添加新元素。更具体地说,当 myTemp 是局部变量并在完成后被删除时,myTemp.add(ss) 如何向 myMap 添加新元素执行。而且,从addToMap()方法中删除myTemp.add(ss)会在main方法中打印出一个空的HashMap,这是为什么呢? put方法在add方法之前执行时如何将元素插入到map中?谢谢。

编辑:我编辑了代码以使其更有意义。

最佳答案

与 C++ 不同,Java 中的所有变量都是对真实对象的引用。所以,当你这样做时

myTemp = new Object();

您在堆中创建一个对象,该对象的引用被复制到堆栈变量 myTemp。如果将引用添加到列表(或其他变量),则会在其中添加引用的副本。

一旦 myTemp 被销毁,该对象将继续存活。异常(exception)情况是当对该对象的所有引用都消失时;那么代码就无法访问该对象,垃圾收集可以(但不强制)从内存中删除它。

关于java - 了解 Java 集合中的 Java 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923039/

相关文章:

java - 如何计算选中的复选框总数?如果(总共选择的)>10 则禁用休息

java - java中的实例变量继承

java - 合并 Hashmap 保留值 JAVA

java - 计算映射中的类实例

java - 保存 oracle 数据库的状态以恢复到什么状态?

java - Oracle 数据库更改通知仅每 15 分钟发送一次

python - 如何在 python 中更改列表中的数字

list - SML - 查找列表中的出现次数以形成有序对

Java/Android - 两个 Collections.sort 组合(首先按 int,然后按名称)

java - 检查自定义 ListView 中的值是否已存在