关于java变量的一个疑问

JoeChen 2005-06-20 04:51:55
这个函数为常见的去列表的函数:
如下,便是取1~50的对象
public ArrayList getResList(long begin, long end, String orderby,
String ordertype) {
ArrayList list = new ArrayList();
ResBase res = null;
...
while(rs.next()) {
res = new ResBase();
res.setResid(i);
res.setTitle("title");
res.setDescribe("descripe");
list.add(res);
res=null;
}
return list;
}
疑问:list.add(res);这句吧对象加到列表中,因为res对象是在循环外定义的。我想,最后加到
列表中的元素应该全部是rs结果集最后一条new出来的(每一个res都指向res的地址)。
但是,我把列表中的值打印出来,却发现不是这样的?为什么?list.add动作难道做了拷贝操作吗?
...全文
84 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cAeolus 2005-06-20
  • 打赏
  • 举报
回复
如果把new放在外面,每次修改都是同一个对象的值,则list中所有的指向的对象是同一对象,
如果想list保存所有的数据,则要将new放入循环里面;
要不然打印出来的都是同一个值了。
其实相当于C中的指针的使用
JoeChen 2005-06-20
  • 打赏
  • 举报
回复
谢谢大家!顿悟啊~~
chenmoderen 2005-06-20
  • 打赏
  • 举报
回复
每次循环 都产生了一个对象 ,然后将对 对象的引用 加入到 list中,所以 list中是所有50个对象
kindle0226 2005-06-20
  • 打赏
  • 举报
回复
res = new ResBase这条语句应该放在循环外
darkattack 2005-06-20
  • 打赏
  • 举报
回复
每次res = new ResBase();的时候产生了一个对象,并把对象的地址给了res,所以list.add(res);
加的是本次产生的对象。
如果res = new ResBase();放在WHILE外面,那就只产生过一个ResBase对象。
ResBase res = null只是声明,res这个时候并没有指向实际的对象,就是指向空(null)呀。
如果你这个时候调用res的方法,因为它没有指向实际的对象,所以一定会空指针异常。
kingfish 2005-06-20
  • 打赏
  • 举报
回复
你的理解属于这种
res = new ResBase();
while(rs.next()) {
res.setResid(rs.getString("Id"));
res.setTitle(rs.getString("title"));
res.setDescribe(rs.getString("descripe"));
list.add(res);
}
kingfish 2005-06-20
  • 打赏
  • 举报
回复
res每次指向不同的ResBase对象, list中加入是res引用的对象,不是res本身.
JoeChen 2005-06-20
  • 打赏
  • 举报
回复
不好意思!

while(rs.next()) {
res = new ResBase();
res.setResid(rs.getString("Id"));
res.setTitle(rs.getString("title"));
res.setDescribe(rs.getString("descripe"));
list.add(res);

}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧