2013-02-11 84 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