2012-05-03 34 views
0

會發生什麼事,當我這樣做:當列表<Integer> A =列表<Integer> B時會發生什麼?

List<Integer> listA = new ArrayList<Integer>(); 
List<Integer> ListB = new ArrayList<Integer>(); 

listA = ...filled with some data... 
listB = ...filled with some other data... 

listA.clear(); 
listA = listB; 

是否值的副本或者只是重新參考?如果我現在(在此代碼後)再次撥打listA.clear(),請問listB也清楚了嗎?

回答

6

那麼,在listA = listB之後,變量listA引用與listB相同的列表。有沒有拷貝構造函數的Java就像你在C++等有它

2

的參考只是價值將會被複制,所以他們都將參照同一目標

+0

因此,清除一個列表將清除兩個,對吧? – sandalone

+0

是<!-------------------> –

0

沒有,listAlistB是兩個不同的整數列表,它們彼此不相關。如果您在ListA上執行clear(),則ListB根本不會受到影響。在你的情況結束ListA引用被改變,變量現在指向ListB。所以,這兩個變量都指向一個列表,即ListB。所以,對這些參考文獻的任何操作都會產生相同的效果。 ListA對象已經是空的,它不包含任何內容。並且沒有任何方法可以引用該對象。

+0

我指的是引用後的listA.clear()。我將修復Q – sandalone

+1

@sandalone是的,這是正確的。在這種情況下,你將有兩個列表對象爲空。 –

+1

this listA = listB;會將listB的引用複製到listA中,所以即使它們在開始時它們是不相關的,那麼它們開始具有相同的引用,不管listA是否爲空。 –

1

只有原始類型纔會被值複製,如果你這樣做了,你將擁有listA和listB引用同一個列表,所以你對listA做的任何操作都會對listB和副作用有相同的效果。 如果你想失去參考,只需將其中一個變量設置爲null即可。

相關問題