这个函数为常见的去列表的函数:
如下,便是取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动作难道做了拷贝操作吗?
如下,便是取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动作难道做了拷贝操作吗?
解决方案 »
- 写一个配置环境变量的批处理文件
- 告苦难的同胞NetBeans的NullPointerException解决办法
- 请问关于synchronized的两种格式的不同
- java编码问题
- 请教如何用java实现所谓的“只运行一个实例”
- 为什么我的System.in.read()不能挂起程序?
- 初学JAVA 怎样编译JAVA文件(做了一个sample.java文件,不知道怎样编译)
- 求救!简单问题
- 请教,SQL Server中的nvarchar在JDBC中映射为什么类型?
- 无聊,哪里能下载武侠小说!(内空)
- 字符串 getBytes() 的问题
- 求com.borland.jbcl.layout包!急!!!!
while(rs.next()) {
res = new ResBase();
res.setResid(rs.getString("Id"));
res.setTitle(rs.getString("title"));
res.setDescribe(rs.getString("descripe"));
list.add(res);
}
res = new ResBase();
while(rs.next()) {
res.setResid(rs.getString("Id"));
res.setTitle(rs.getString("title"));
res.setDescribe(rs.getString("descripe"));
list.add(res);
}
加的是本次产生的对象。
如果res = new ResBase();放在WHILE外面,那就只产生过一个ResBase对象。
ResBase res = null只是声明,res这个时候并没有指向实际的对象,就是指向空(null)呀。
如果你这个时候调用res的方法,因为它没有指向实际的对象,所以一定会空指针异常。
如果想list保存所有的数据,则要将new放入循环里面;
要不然打印出来的都是同一个值了。
其实相当于C中的指针的使用