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