2017-04-14 58 views
-2

我認爲所有內容都基於Java中的引用。我有一個複雜的對象,其中包含一個子列表。子對象上的新ArrayList()不會更新父對象中的引用

ParentObj 
|-- ... 
|-- List<String> childList 

當我直接修改childList時,我看到「ParentObj」相應地更新其childList參考。

childList.add("Hello"); 

但是當我做

if (childList == null) { 
    childList = new ArrayList<String>(); 
} 

我看到 「ParentObj」 仍然有一個空的子列表!這種情況有所不同,我期待ParentObj參考得到更新,就像設置/添加一樣。

+5

你能爲此提供[MCVE](https://stackoverflow.com/help/mcve)嗎? – csmckelvey

+2

你的問題中肯定沒有顯示。如果'childList'確實是'null',那麼調用'childList.add',你會得到'NullPointerException'。請提供更多背景。 – Dolda2000

回答

-2

Java按值傳遞引用。這意味着作爲方法參數傳遞的引用有重複。所以當你指定childList時,如果它不是原始引用,那麼賦值是對重複引用完成的。

這就是爲什麼你應該使用setter方法。