ResultSet rs = this.getData(sql);
Student student = new Student();
while(rs.next()){
student.setsId(rs.getInt("sid"));
student.setsName(rs.getString(2));
student.setSex(rs.getString("sex"));
student.setsBorndate(rs.getDate("sborndate"));
student.setsAge(rs.getInt("sage"));
student.setsEmail(rs.getString("semail"));
student.setPwd(rs.getString("pwd"));
student.setCityId(rs.getInt("cityid"));
list.add(student);
}
return list;
問題來源:
本來想通過循環為student對象賦值,將其信息存儲到list集合中。
自認為在循環外只創建一個對象會節省內存會,打印時卻發現list存儲的都是student的最后一次賦的值。
分析:
在循環外創建一份對象,申請一份內存空間,然而在for循環內賦值,student只會保留最后一次的值。又因list保存的只是student的引用,也就是list中的student引用 指向不斷被·更改,指向了 同一塊內存區間,造成了list里面的值相同。
改進:
ResultSet rs = this.getData(sql);
while(rs.next()){
Student student = new Student();
//不能放在循環外,因為list只保存student的引用
//而student循環賦值,導致指向了同一塊區間
student.setsId(rs.getInt("sid"));
student.setsName(rs.getString(2));
student.setSex(rs.getString("sex"));
student.setsBorndate(rs.getDate("sborndate"));
student.setsAge(rs.getInt("sage"));
student.setsEmail(rs.getString("semail"));
student.setPwd(rs.getString("pwd"));
student.setCityId(rs.getInt("cityid"));
list.add(student);
}
return list;