[英]ArrayList. Strange things
我有代碼:
private class Record {
byte year;
float val;
}
Record record=new Record();
List<Record> recList = new ArrayList<Record>();
...
//now I add first element to array list
record.year=12;
record.val=55;
recList.add(record);
//now I add second element to array list
record.year=13;
record.val=77;
recList.add(record);
如您所見,我添加了不同的元素。 但是結果是數組列表中的所有元素都是相同的。 因此,添加2nd,3-d ...元素會將所有先前的元素更改為最后一個“ record”的值。 怎么了? 謝謝?
ArrayList
保留了對對象的引用列表。 您總是在修改同一原始對象,這意味着引用相同,但是其值不同。
您可以通過將新實例顯式分配給record
變量來解決此問題:
record.year=12;
record.val=55;
recList.add(record);
record = new Record();
record.year=13;
record.val=77;
recList.add(record);
您需要實例化新對象,以便它們在物理上是不同的對象。 現在,您只有一個對象多次位於ArrayList中。
Record record = new Record();
另外,由於要使用集合,因此應在記錄中添加hashCode()和equals()。
如您所見,我添加了不同的元素
不,您只是編輯了舊的Record
對象並再次添加了它。 每次添加Record
對象之前,都需要創建一個new
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.