复制列表对象值不参考

时间:2012-06-13 20:46:38

标签: list ref

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

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

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

2 个答案:

答案 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 CloneableObject.clone()

相关问题