其实我也不敢肯定就是add()方法的问题,只是通过简单的调试感觉就应该是。
因为是jsp中的问题,没法贴出源代码让大家调试,大致描述一下症状:通过循环每次往ArrrayList对象中添加一个对象,在每次循环时把对象打印显示它的内容,是一个一个的各自的数值可是循环结束后,对ArrrayList对象再循环显示(get(int index)方法)的时候是全部都变成一个数值了,而且就是最后一个我试着在每往ArrrayList对象里面添加一个对象后就循环显示,结果发现是:每添加一个对象,ArrrayList对象里所有的对象都变成了刚刚添加的这个,当然ArrrayList对象的size()的确是增加了一个。很纳闷,怎么会是这样的效果?
代码大致如下:(rs是结果集, )
while (rs.next()) {
Book book = new Book();
book.initFromResultSet(rs); // 从结果集中给Book对象赋值
//System.out.println(book.getId());
books.add(book);
System.out.println("**************");
for (int i = 0; i < books.size(); i++) {
System.out.println(books.get(i).getAuthor());
System.out.println(books.get(i).getId());
//System.out.println(books.get(i).getPulisherString(books.get(i).getPublisher()));
}
}输出结果:
**************
甘勇
1000000001
**************
郭功兵
1000000002
郭功兵
1000000002
**************
韩丽
1000000003
韩丽
1000000003
韩丽
1000000003
**************
朱付宝
1000000004
朱付宝
1000000004
朱付宝
1000000004
朱付宝
1000000004
**************
熊坤
1000000005
熊坤
1000000005
熊坤
1000000005
熊坤
1000000005
熊坤
1000000005
**************
钱慎一
1000000006
钱慎一
1000000006
钱慎一
1000000006
钱慎一
1000000006
钱慎一
1000000006
钱慎一
1000000006
**************
金保华
1000000007
金保华
1000000007
金保华
1000000007
金保华
1000000007
金保华
1000000007
金保华
1000000007
金保华
1000000007
**************
谭浩强
1000000008
谭浩强
1000000008
谭浩强
1000000008
谭浩强
1000000008
谭浩强
1000000008
谭浩强
1000000008
谭浩强
1000000008
谭浩强
1000000008

解决方案 »

  1.   

    那可能是Book对象有问题,请检查方法book.initFromResultSet(rs);
      

  2.   

    刚开始我也以为是这个方法有问题,可是如果有问题的话,那为什么还能打印出信息呢?
    而且我也重载了Book的toString()方法,我也打印过,确实是每个成员变量都可以出来
    关键就是为什么他们最后会都变成一样的了
      

  3.   

    这跟ArrayList有啥关系?肯定你集合中的book使用的是同一个引用,改变一个,所有的都改变,
    因为他们指向的是同一个,,好好检查下
      

  4.   

    Arraylist的add方法加入的是一个对象的引用么?!
    能不能帮我看下下面的代码
    String string=new String();
    string="a";
    List<String> list2=new ArrayList<String>();
    list2.add(string);
    string="b";
    list2.add(string);
    for (Iterator iterator = list2.iterator(); iterator.hasNext();) {
    String string2 = (String) iterator.next();
    System.out.println(string2);
    }
    这里输出的是"a""b",不是"a""a"