List,add添加對象,屬性值都為最后添加的參數


問題:

List<People> peopleList = new ArrayList();
People people = new People();
for(int i = 0 ; i < 10 ; i++){
    people.setId("id" + i);
    people.setAge("age" + i);
    peopleList.add(people);
}
//輸出結果都是 
//id10
//age10
sout(peopleList);

原因

問題的產生在於,對象。對象中保存的都是地址
People 對象在循環前,便新建成功,分配了內存空間,不再發生變化。
每次賦值的過程,都是在同一個內存空間,更改保存的地址。

peopleList.add(people);
//其中,List 中保存的是,people 這個對象。

//在循環賦值的過程中,people 中的保存的值(所指向的地址)一直在發生變化。
for(int i = 0 ; i < 10 ; i++){
    people.setId("id" + i);
    people.setAge("age" + i);
}

所以最后存入 List 中的對象,都是最后輸入的屬性

正確的做法

List<People> peopleList = new ArrayList();

for(int i = 0 ; i < 10 ; i++){
    //將對象的定義放在循環里,每次都是一個新的對象
    People people = new People();
    people.setId("id" + i);
    people.setAge("age" + i);
    peopleList.add(people);
}
sout(peopleList);

此時,每次循環都會新建一個對象,分配一個新的內存空間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM