List.add()方法使用时被覆盖

代码如下:

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;
  }
}
}
发布了54 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/liutaiyi8/article/details/102815105
今日推荐