2016-04-17 118 views
-1

當我們調用ArrayList.add()方法時,它是否會創建一個新對象並將其添加到列表中,或者是否將引用的對象添加到列表中?當我們調用ArrayList.add()方法時會發生什麼?

例如:假設我們有兩個ArrayList如下:

ArrayList<ClassA> a1ArrayList<ClassA> a2。如果我運行代碼:

a2.add(a1.get(i))它會創建一個新的對象,然後將其添加到a2或它會引用兩個不同列表中的同一個對象?

這不是

副本就是Java按值傳遞或按引用傳遞的問題?

因爲我想知道ArrayList.add()方法的內部工作,那它是否創建了傳遞或不傳遞的參數的對象副本?

+0

的可能的複製[Java的是「傳址參考」或「傳遞的價值」?](http://stackoverflow.com/問題/ 40480/is-java-by-reference-or-pass-by-value) – Savior

+0

@Pillar它是關於'ArrayList.add()'方法的工作原理。 – cnova

+0

沒有理由具體說明「add」。所有的方法在這方面都是一樣的。 – Savior

回答

3

它將引用兩個不同列表中的同一個對象。

當然,您可以隨時通過一些調試工作來驗證這一點。

+3

或使用'==';) –

2

您只能將引用或基元傳遞給方法。這種方法也不例外。

ArrayList<String> list = new ArrayList<>(); 
String s = "Hello"; 
list.add(s); // pass the reference. 

a2.add(a1.get(I))將它創建一個新的對象,然後將其添加到A2或將參照從兩個不同的列表,以相同的對象?

這將意味着兩個列表具有相同的參考(這將指向同一個對象)的副本

2

它將是指由這兩個不同列表相同的對象,如果您編輯這意味着對象來自一個地方,另一個也受到影響。

如果你不希望出現這種情況,考慮使該類immutable

相關問題