给定以下代码:
ArrayList<String> original = new ArrayList<String>();
original.add("one");
original.add("two");
original.add("three");
Cache ch = new Cache();
ch.store(original);
original.remove(0);
original.remove(0);
System.out.println("modified list is"+original);
System.out.println("cache list is"+ch.getCache());
和一个缓存类:
public class Cache {
private ArrayList<String> clone = new ArrayList<String>();
public void store(ArrayList<String> original){
this.clone = original;
}
public ArrayList<String> getCache(){
return this.clone;
}
}
输出是:
modified list is[three]
cache list is[three]
其实我是想用缓存来存储原来包含“一,二,三”的列表。当它存储该列表,并使用“原始”列表实现删除时,它不会影响存储在缓存中的列表,这意味着它仍然包含“一、二、三”。那怎么办呢?
最佳答案
您只存储了对列表的引用,所以您得到的结果是预期的!
相反,在构建时制作副本:
public void store(ArrayList<String> original){
clone = new ArrayList<String>(original);
}
关于java - 在java中进行深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646089/