创建对象在while循环里面和外面的不同效果

1.在while循环的外面

public List<CollectionBean> list() {
String sql = "select * from collectiontbl";
Connection conn = JDBC_Connection.getConnection();
Statement stmt = null;
ResultSet rs = null;
List<CollectionBean> list = new ArrayList<CollectionBean>();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
CollectionBean bean = new CollectionBean();

while (rs.next()) {
//不能再while外面创建这个对象,这是一个非常有技术含量的问题
bean.setId(rs.getInt("id"));
bean.setName(rs.getString("name"));
bean.setName(rs.getString("url"));
list.add(bean);
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getId()+" "+list.get(i).getName());
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC_Connection.free(rs, conn, stmt);
}
return null;
}
运行结果:
1 www.dkfj.com
2 www.dkfj.com
3 www.dkfj.com
4 www.dkfj.com
5 www.dkfj.com
6 www.dkfj.com


原因解释:
我们注意到这个结果显然不是我们想要的,因为创建了一个对象在while循环外面,每循环一次创建的对象都没有变,改变的只是在栈上的值,而添加到list里的对象都指向到还存在的这个对象的栈上。当最后对象消失的时候,list里所有的对象才把栈上的值copy起走,所以打印的结果全部是一样的。所以我们需要把创建对象放在while循环内。
下面是详细的图解:
[img]http://dl.iteye.com/upload/picture/pic/76155/cdd2d4ff-7f78-38f5-ac61-894295aceb1e.jpg[/img]
1.在while循环的里面

public List<CollectionBean> list() {
String sql = "select * from collectiontbl";
Connection conn = JDBC_Connection.getConnection();
Statement stmt = null;
ResultSet rs = null;
List<CollectionBean> list = new ArrayList<CollectionBean>();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
//不能再while外面创建这个对象,这是一个非常有技术含量的问题
CollectionBean bean = new CollectionBean();
bean.setId(rs.getInt("id"));
bean.setName(rs.getString("name"));
bean.setName(rs.getString("url"));
list.add(bean);
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getId()+" "+list.get(i).getName());
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBC_Connection.free(rs, conn, stmt);
}
return null;
}
运行结果:
1 www.baidu.com
2 www.google.com
3 www.google.com
4 www.javaeye
5 www.javaeye
6 www.dkfj.com

原因解释:
[img]http://dl.iteye.com/upload/picture/pic/76157/68abc8fa-1e7c-3108-ba06-887b7176c496.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值