1. 程式人生 > >使用ArrayList.add()時 後面的資料完全覆蓋前面的資料

使用ArrayList.add()時 後面的資料完全覆蓋前面的資料

今天在寫專案時發現了一個bug

question = new Question();
question = GetQuestion.GetQuestion(str);
list.add(question);

GetQuestion中的GetQuestion方法是解析傳入的字串,以question物件返回。但是之後發現之後解析的question會覆蓋list中前面的question,結果是list中全是最後一次解析的question。

經過一番除錯才發現GetQuestion中的GetQuestion方法中的question變數是靜態的(static),也就是我們放入list中的物件都是這個靜態的question,雖然我們每次的question不一樣,但是傳入的引用都是GetQuestion中這個靜態的變數,以至於最後list中都是最後一次解析的question,也就是那個靜態變數。
所以以後向list中傳資料不要傳靜態變數而且每次傳入的資料要重新new一個保證是一個新的引用