今天学习jdbc时,将从数据库取出来的数据存入ArrayList集合中时出现了一点小问题
List<User> users=new ArrayList();
User user=new User();
在输出时发现输出的数据都是最后一条,前面的数据完全被覆盖,解决这个问题很简单就是把User user = new User();这一句代码放进while循环内.为什么会出现这样的情况呢?原因在于ArrayList的add()方法添加的是对象的引用,如果上述一行代码在while循环外面,那么创建的对象引用始终只有一个,而while循环内一直在改变对象的各个变量,直至while循环结束,而添加进入users的引用始终是不变。而如果将上述一句代码放入while循环内,则相当于每次循环都创建了一个对象引用,并且指向当次循环的对象,users各对象引用指向的对象变量值都是不同的.while(rs.next()){ user.setNo(rs.getInt("no")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); users.add(user); System.out.println(user.getAge()); } for (User u : users) { System.out.println(u.getAge()); }