Java中ArrayList的add()方法奇怪的问题

mltong 2009-07-07 10:44:27
其实我也不敢肯定就是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

...全文
587 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ray_corpse 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sangshusen_1988 的回复:]

这跟ArrayList有啥关系?肯定你集合中的book使用的是同一个引用,改变一个,所有的都改变,
因为他们指向的是同一个,,好好检查下
[/Quote]
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"
mltong 2009-07-07
  • 打赏
  • 举报
回复
我也不知道怎么回事,现在又好了
谢谢大家了
jianxuan 2009-07-07
  • 打赏
  • 举报
回复
单步调试一下,看看每次循环,什么时候把数组里面的值改变了。
sangshusen_1988 2009-07-07
  • 打赏
  • 举报
回复
这跟ArrayList有啥关系?肯定你集合中的book使用的是同一个引用,改变一个,所有的都改变,
因为他们指向的是同一个,,好好检查下
mltong 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 anhy 的回复:]
那可能是Book对象有问题,请检查方法book.initFromResultSet(rs);
[/Quote]
刚开始我也以为是这个方法有问题,可是如果有问题的话,那为什么还能打印出信息呢?
而且我也重载了Book的toString()方法,我也打印过,确实是每个成员变量都可以出来
关键就是为什么他们最后会都变成一样的了
anhy 2009-07-07
  • 打赏
  • 举报
回复
那可能是Book对象有问题,请检查方法book.initFromResultSet(rs);

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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