假设我有一个名为“Node”的对象列表 - >可重复的allNodes。
假设我遍历allNodes中的所有节点并将它们添加到自己的列表中,如下所示:
Iterable<Node> allNodes = dataManager.getAllNodes();
List<Node> copyOfAllNodes;
for(Node node : allNodes) {
copyOfAllNodes.add(node);
}
副本是否成为引用,还是不影响原始列表的副本?
答案 0 :(得分:3)
它将成为一个参考。执行时:
copyAllNodes.add(node)
您是node
的对象copyAllNodes
。
如果你想要一个对象的副本,你有其他方法。其中一种方法可能是close
,它基本上是实现Cloneable
接口并公开clone
方法以复制对象,因此您可以执行以下操作:
copyAllNodes.add(node.clone)
这将是一个副本,您可以修改而不会对复制的对象进行任何反射。 最好记住,默认克隆方法只是对象的浅层副本。
Object类的方法clone执行特定的克隆 操作。首先,如果此对象的类没有实现 接口Cloneable,然后抛出CloneNotSupportedException。注意 所有数组都被认为是实现了Cloneable接口。 否则,此方法将创建此类的新实例 对象并初始化其所有字段的确切内容 该对象的相应字段,好像通过赋值;内容 这些田地本身没有克隆。因此,该方法执行a 这个对象的“浅拷贝”,而不是“深拷贝”操作。