2013-02-11 82 views
1

比方说,我有一个Node类。它有一个单一的领域,Node parentNode.它也有setters和getters。Java对对象的引用

我有2个节点:Node nodeANode nodeB

这里就是我想要做的:设置nodeB的父母nodeA的父母,然后设置nodeA的母公司为null。

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

为了实现上述目标,我必须克隆nodeA,然后做nodeB.setParent(nodeAClone.getParent())

+2

确切地说,你提出的代码有什么问题?当你尝试它时,它不适合你吗? – 2013-02-11 23:16:11

+0

我应该先尝试一下...对不起 – 2013-02-11 23:30:25

回答

2

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 object.Now,当您将nodeA parent设置为null时,它与该parent分离,但nodeB parent引用仍然存在。

+0

明确阐述了java通过值/引用传递。 – digitaljoel 2013-02-11 23:20:29

+0

@digitaljoel。欢呼:) – 2013-02-11 23:29:05

3

因为nodeX.parent是一个对象的引用:

  • 当你调用nodeB.setParent(nodeA.getParent())你说的到NodeB“这里是nodeA上的父级的地址。”
  • 当你说nodeA.setParent(null);你对nodeA说:“忘记你的父母住在哪里,你的父母现在什么都没有。”
  • 你在第二条语句中对nodeB没有提及,它仍然具有它现在的父对象的地址。
+0

感谢您的帮助 – 2013-02-12 00:58:41