根据对象的创建位置不同,打印ArrayList里的内容
求出下面两段程序最终打印的数据:
一:
public void testPrintArrayListByDifferObject() { List<Car> arraylist = new ArrayList<Car>(); for (int i = 0; i < 3; i++) { Car car = new Car(); car.setNum(i); arraylist.add(car); } for (int i = 0; i < arraylist.size(); i++) { System.out.println(arraylist.get(i).getNum()); } }
二:
public void testPrintArrayListBySameObject() { List<Car> arraylist = new ArrayList<Car>(); Car car = new Car(); for (int i = 0; i < 3; i++) { car.setNum(i); arraylist.add(car); } for (int i = 0; i < arraylist.size(); i++) { System.out.println(arraylist.get(i).getNum()); } }
第一段代码打印:
0
1
2
第二段代码打印:
2
2
2
当时我把第二段代码的打印结果也写成了0,1,2。写错的原因是自己对程序的执行流程没有一个清晰的认识。现在分析一下第二段代码的执行流程:第二段代码中,只创建了一个car对象。在第四行的for循环中,每次car对象都将num设置为当前的循环的i值,例如,当i=0时,将car对象的num值都设置为0,当i=1时,将car的num值都设为1,当i=2时,将car对象的num值都设置为2。所以最终打印结果为2,2,2.