Java List循环add结果异常的问题


public class App {
  public static void main(String[] args) {
    List<Apple> listApple = new ArrayList<>();
    Apple apple = new Apple();
    for(int i=0; i<5; i++) {
      apple.setName("苹果" + i);
      listApple.add(apple);
    }
    System.out.println(listApple.toString());
  }
}

以上代码预期输出:[[name=苹果0] , [name=苹果1] , [name=苹果2] , [name=苹果3] , [name=苹果4] ]

但实际输出:[[name=苹果4] , [name=苹果4] , [name=苹果4] , [name=苹果4] , [name=苹果4] ]

这是因为 listApple 中存储的是 Apple 对象的引用地址,上面的5次循环修改的其实是同一个对象的属性,所以结果是最后一个的值 苹果4

修改后的代码:

public class App {
  public static void main(String[] args) {
    List<Apple> listApple = new ArrayList<>();
    for(int i=0; i<5; i++) {
      Apple apple = new Apple(); // 在循环内部 new 对象
      apple.setName("苹果" + i);
      listApple.add(apple);
    }
    System.out.println(listApple.toString());
  }
}

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注