List集合存储对象,存的都是最后一个输入的值

List集合存储对象,存的都是最后一个输入的值

public class User {
    private int id;
}
public static void main(String[] args) {  
    List<User> list =new ArrayList<>();   
    User user = new User();   
    for(int i=0;i<10;i++){    
        user.setId(i);
        System.out.print(user);
        list.add(user);    
    }    
  System.out.println(list.toString());
}

结果显示:

User(id=0) User(id=1) User(id=2) User(id=3) User(id=4) User(id=5) User(id=6) User(id=7) User(id=8) User(id=9)

[User(id=9), User(id=9), User(id=9), User(id=9), User(id=9), User(id=9), User(id=9), User(id=9), User(id=9), User(id=9)]

原因:

在循环外创建对象,在循环内赋值,实际上是给同一个对象赋值,而添加进集合的是对象的地址,所以集合里的对象指向的是同一个对象。

解决方案:

在循环里面创建对象。

你可能感兴趣的:(List集合存储对象,存的都是最后一个输入的值)