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)]
原因:
在循环外创建对象,在循环内赋值,实际上是给同一个对象赋值,而添加进集合的是对象的地址,所以集合里的对象指向的是同一个对象。
解决方案:
在循环里面创建对象。