1. 程式人生 > >迴圈往list中放物件卻總是一個物件的問題

迴圈往list中放物件卻總是一個物件的問題

最近在寫程式碼的時候遇到一個問題。大致情況是有一個List物件,要迴圈往list中放入物件。例如:

Student s = new Student();

List list = new ArrayList();

for(int i = 0;i < 10;i++){

//此處設定物件屬性

s.setXXX();

//將設定好屬性的物件放入list

list.add(s);

}

大致程式碼類似於這樣。本以為這樣就可以了,結果發現,list中的物件全都是同一個物件。並不是我想要結果。仔細研究發現一個小問題。分析如下。

在new 一個物件的時候,物件的ID是唯一確定的。在我們將物件放入list中時,list中的其實是物件的引用 。而每次只是簡單的set物件的屬性。add進list中的物件還是同一個物件id,也就是同一個物件。所以每次add之後,list發現物件引用和之前元素一樣,就覆蓋掉了之前add的物件。所以迴圈之後只會出現,list的size只有1。

想要避免這個問題只要每次add時保證物件引用都是不同的即可。

問題簡單,但是容易忽略,希望能給一些人幫助。