我尝试创建一个新的列表对象。我将新对象设置为旧的现有obejct。
List<string> names = new List<string>();
names = olderList;
我遇到的问题是,当oldList更改时,名称列表指向oldList,名称也会更改。我尝试用forech复制值,但它仍然做同样的事情,参考oldList。
答案 0 :(得分:0)
在Java中进行作业时,复制参考,而不是内容。因此,名称将指向与oldList相同的内存地址。
当您复制所有值时,您执行相同的操作 - 您将为名称列表分配对存储在oldList中的每个String的另一个引用。
可能解决您的问题的想法是使用foreach但不是添加每个元素,而是创建一个新的String,它是旧的一个副本。它会是这样的:
names=new List<String>();
foreach (String s: olderList) {
names.add(new String(s));
}
检查我使用的构造函数及其在Oracle's reference site的含义。
答案 1 :(得分:0)
您必须创建一个新列表并克隆每个元素。 如果你打电话
olderList.clone()
它会给你一个浅拷贝(即一个新的列表,引用第一个列表的对象)。你必须这样做:
for(String name : olderList){
newList.add(name.clone());
}
参考:java api Cloneable,Object.clone()