今天學習jdbc時,將從數(shù)據(jù)庫取出來的數(shù)據(jù)存入ArrayList集合中時出現(xiàn)了一點小問題
List<User> users=new ArrayList();User user=new User();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()); }在輸出時發(fā)現(xiàn)輸出的數(shù)據(jù)都是最后一條,前面的數(shù)據(jù)完全被覆蓋,解決這個問題很簡單就是把User user = new User();這一句代碼放進while循環(huán)內(nèi).為什么會出現(xiàn)這樣的情況呢?原因在于ArrayList的add()方法添加的是對象的引用,如果上述一行代碼在while循環(huán)外面,那么創(chuàng)建的對象引用始終只有一個,而while循環(huán)內(nèi)一直在改變對象的各個變量,直至while循環(huán)結束,而添加進入users的引用始終是不變。而如果將上述一句代碼放入while循環(huán)內(nèi),則相當于每次循環(huán)都創(chuàng)建了一個對象引用,并且指向當次循環(huán)的對象,users各對象引用指向的對象變量值都是不同的.
新聞熱點
疑難解答