您的位置:首页 > 其它

实例化的对象和引用...while(**.next()){实例化位置 、、***list.add(实例化的那个对象) }

2017-03-28 10:42 239 查看
public List<NewsCategory> getNewsCategoryList() {
List<NewsCategory> newsCategoryList = new ArrayList<NewsCategory>();
String sql ="select * from news_category";
Object[] params = {};
if(this.getConnection()){
ResultSet rs = this.executeSQL(sql, params);
try {
while(rs.next()){
//如果实例化NewsCategory写在while循环外 ,会导致list里面add进去6条重复数据!!!
NewsCategory newsCategory = new NewsCategory();
newsCategory.setId(rs.getInt("id"));
newsCategory.setName(rs.getString("name"));
newsCategory.setCreateDate(rs.getTimestamp("createDate"));

newsCategoryList.add(newsCategory);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeResource();
}
}

return newsCategoryList;
}

List 的add方法 添加的是 new出来对象的引用变量newsCategory,所以 如果要需要存储不同的对象 ,就要各自用new来实例化。

 

如果实例化NewsCategory写在while循环外,只是实例化了一个NewsCategory对象

          new操作也就是会在堆内存中分配一个对象的内存引用变量 newsCategory指向这个内存中的对象

 所以:List 的add方法增加的是同一个变量 newsCategory,并增加了6次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: