核心java基础知识

时间:2018-04-18 01:30:51

标签: java

如何通过不真正更新str2str1来更新仅str?为什么str2中的更改正在更新str1str?是因为对象引用吗?

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class test {

    List<HashMap<String, String>> str;

    public static void main(String[] args) {
        Map<String, String> hmap = new HashMap<String, String>();
        hmap.put("1", "s1");
        hmap.put("2", "s2");
        test testobj = new test();
        testobj.str = new ArrayList<HashMap<String, String>>();
        testobj.str.add((HashMap<String, String>) hmap);
        testing(testobj.str);
    }

    static void testing(List<HashMap<String, String>> str) {

        List<HashMap<String, String>> str2 = new ArrayList<HashMap<String, String>>();
        List<HashMap<String, String>> str1 = str;
        str2.add(str1.get(0));
        str2.get(0).put("1", "new");

        System.out.println(str);
        System.out.println(str1);
        System.out.println(str2);

    }
}

1 个答案:

答案 0 :(得分:0)

您必须像这样创建原始List<HashMap<String, String>> str1 = new ArrayList<>(str); 的副本:

ArrayList

创建一个新的List,其中包含原始stack中的所有元素。这样,您就会有两个单独的列表,其中包含自己的元素。