这个函数为常见的去列表的函数:
     如下,便是取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.   

    不好意思!
     
           while(rs.next()) {
                res = new ResBase();
                res.setResid(rs.getString("Id"));
                res.setTitle(rs.getString("title"));
                res.setDescribe(rs.getString("descripe"));
                list.add(res);
                
            }
      

  2.   

    res每次指向不同的ResBase对象, list中加入是res引用的对象,不是res本身.
      

  3.   

    你的理解属于这种 
     res = new ResBase(); 
     while(rs.next()) {
                res.setResid(rs.getString("Id"));
                res.setTitle(rs.getString("title"));
                res.setDescribe(rs.getString("descripe"));
                list.add(res);            
            }
      

  4.   

    每次res = new ResBase();的时候产生了一个对象,并把对象的地址给了res,所以list.add(res);
    加的是本次产生的对象。
    如果res = new ResBase();放在WHILE外面,那就只产生过一个ResBase对象。
    ResBase res = null只是声明,res这个时候并没有指向实际的对象,就是指向空(null)呀。
    如果你这个时候调用res的方法,因为它没有指向实际的对象,所以一定会空指针异常。
      

  5.   

    res = new ResBase这条语句应该放在循环外
      

  6.   

    每次循环 都产生了一个对象  ,然后将对 对象的引用 加入到  list中,所以 list中是所有50个对象
      

  7.   

    如果把new放在外面,每次修改都是同一个对象的值,则list中所有的指向的对象是同一对象,
    如果想list保存所有的数据,则要将new放入循环里面;
    要不然打印出来的都是同一个值了。
    其实相当于C中的指针的使用