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()); } }
xxx