某天开发的时候遇到了这么一个情况:

  

 1 List<Bean> listOut = new ArrayList<Bean>();
 2 List listBack = new ArrayList();
 3 List listInSide = new ArrayList();
 4 Bean beanBack = new Bean();
 5 
 6 for (int i = 0; i < listBack.size(); i++) {
 7     listInSide = (List) listBack.get(i);
 8     if (listInSide.get(listInSide.size() - 1).equals("[AE80]")) {
 9         beanBack.setAAZ346(listIn.get(0).toString());
10         //-------不重要
11         listOut.add(beanBack);
12     }
13 }                
14 JSONArray json = JSONArray.fromObject(listOut);

最后输出的json结果有三行,全部都是一样的。但是通过debug查看listBack,确实也是三行数据,但是每一行都是不同的。

通过分步debug观察到第一次循环,在listOut插入一行bean以后,第二次插入会改变之前插入的值。

在网上搜索原因发现很多人像我一样遇到过这个问题。

这个问题其实是Java的对象存储的是地址的原因,list中存储的是实例化的bean的地址,由于多次循环改变了bean的值,所以最后输出的时候,每行都是bean的最后一次的值,

所以输出了三行一样的数据。

解决的办法是:在for循环的内部对bean进行实例化,这样就能保证每个add的对象都是new出来的。

 

posted on 2017-03-19 23:51  阳光照进回忆丶  阅读(460)  评论(0)    收藏  举报