代码如下:
public class AddExecption {
public static void main(String[] args){
List<String> list = new ArrayList<>();
String aa = new String();
User user = new User();
List<User> list1 = new ArrayList<>();
for (int i = 0; i < 1; i++){
aa = "11";
list.add(aa);
aa = "22";
list.add(aa);
aa = "33";
list.add(aa);
//
user.setName("lihua");
user.setId("111");
list1.add(user);
user.setName("lilei");
user.setId("222");
list1.add(user);
}
for (int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
for (int i = 0; i < list1.size(); i ++){
System.out.println(list1.get(i).getName()+list1.get(i).getId());
}
}
public static class User{
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
结果:
11
22
33
lilei222
lilei222
自定义的类User使用add方法时将前面的数据覆盖了,
原因是:add加进去的是对象的一个引用,使用同一个对象时,每次都更新了这个引用的值,所以list里面的值都一样的。
解决方法:在每一次使用都new 一下对象,如果是在循环中使用,就将new 放在循环里面就好。
public class AddExecption {
public static void main(String[] args){
List<String> list = new ArrayList<>();
String aa = new String();
List<User> list1 = new ArrayList<>();
aa = "11";
list.add(aa);
aa = "22";
list.add(aa);
aa = "33";
list.add(aa);
//
User user = new User();
user.setName("lihua");
user.setId("111");
list1.add(user);
User user1 = new User();
user1.setName("lilei");
user1.setId("222");
list1.add(user1);
for (int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
for (int i = 0; i < list1.size(); i ++){
System.out.println(list1.get(i).getName()+list1.get(i).getId());
}
}
public static class User{
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}