-1

我正在尝试创建一个新的列表对象。我将新对象设置为旧的现有对象。

List<string> names = new List<string>();
names = olderList;

我遇到的问题是,当 oldList 更改时,名称列表指向 oldList ,名称也会更改。我尝试使用 foreach 复制值,但它仍然在做同样的事情,参考 oldList。

4

2 回答 2

0

当您在 Java 中进行分配时,您复制的是参考,而不是内容。因此,names 将指向与 oldList 相同的内存地址。

当您复制所有值时,您会执行相同的操作 - 您正在为名称列表分配另一个对存储在 oldList 中的每个字符串的引用。

可能解决您的问题的一个想法是使用 foreach 但不是添加每个元素,而是创建一个新字符串,它是旧字符串的副本。它会是这样的:

names=new List<String>();
foreach (String s: olderList) {
  names.add(new String(s));
}

在Oracle 的参考站点检查我使用的构造函数及其含义。

于 2012-06-13T20:56:56.723 回答
0

您必须创建一个新列表并克隆每个元素。如果你打电话

olderList.clone()

它会给你一个浅拷贝(即一个引用第一个列表对象的新列表)。你必须这样做:

for(String name : olderList){
    newList.add(name.clone());
}

参考:java api CloneableObject.clone()

于 2012-06-13T21:04:09.873 回答