假设我有一个Node类。它只有一个字段,Node parentNode.它也有设置方法和获取方法。

我有2个节点:Node nodeANode nodeB

这是我要执行的操作:将nodeB的父级设置为nodeA的父级,然后将nodeA的父级设置为null。


nodeB.setParent(nodeA.getParent());
nodeA.setParent(null); // bad since nodeB.getParent() will = null


为了实现上述目的,我必须克隆nodeA,然后执行nodeB.setParent(nodeAClone.getParent())吗?

最佳答案

nodeA.setParent(null); //不好,因为nodeB.getParent()将= null


不,nodeB.parent将不会设置为null。 Java始终使用Pass by Value而不是pass by reference。重复10次。

如果传递引用,则按引用值传递它们。



让我们更详细地了解。

当您这样做时:-

nodeB.setParent(nodeA.getParent());


您只需创建对nodeA parent的引用的副本,并将其存储在nodeB parent中。因此,现在有两个引用nodeA parent对象的引用。现在,将nodeA parent设置为null时,它已与该parent分离,但nodeB parent引用仍然存在。

10-07 15:54