循环往list中放对象却总是一个对象的问题
2016-09-18 18:06
267 查看
最近在写代码的时候遇到一个问题。大致情况是有一个List对象,要循环往list中放入对象。例如:
Student s = new Student();
List list = new ArrayList();
for(int i = 0;i < 10;i++){
//此处设置对象属性
s.setXXX();
//将设置好属性的对象放入list
list.add(s);
}
大致代码类似于这样。本以为这样就可以了,结果发现,list中的对象全都是同一个对象。并不是我想要结果。仔细研究发现一个小问题。分析如下。
在new 一个对象的时候,对象的ID是唯一确定的。在我们将对象放入list中时,list中的其实是对象的引用 。而每次只是简单的set对象的属性。add进list中的对象还是同一个对象id,也就是同一个对象。所以每次add之后,list发现对象引用和之前元素一样,就覆盖掉了之前add的对象。所以循环之后只会出现,list的size只有1。
想要避免这个问题只要每次add时保证对象引用都是不同的即可。
问题简单,但是容易忽略,希望能给一些人帮助。
Student s = new Student();
List list = new ArrayList();
for(int i = 0;i < 10;i++){
//此处设置对象属性
s.setXXX();
//将设置好属性的对象放入list
list.add(s);
}
大致代码类似于这样。本以为这样就可以了,结果发现,list中的对象全都是同一个对象。并不是我想要结果。仔细研究发现一个小问题。分析如下。
在new 一个对象的时候,对象的ID是唯一确定的。在我们将对象放入list中时,list中的其实是对象的引用 。而每次只是简单的set对象的属性。add进list中的对象还是同一个对象id,也就是同一个对象。所以每次add之后,list发现对象引用和之前元素一样,就覆盖掉了之前add的对象。所以循环之后只会出现,list的size只有1。
想要避免这个问题只要每次add时保证对象引用都是不同的即可。
问题简单,但是容易忽略,希望能给一些人帮助。
相关文章推荐
- 循环往list中add对象却总是add的是一个对象
- 循环往list中add对象却总是add的是一个对象
- 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
- for循环一个list,元素赋值给另一个对象,修改另一个对象,竟然可以修改list
- 关于List里存放对象的一个问题
- 定义一个List集合并实例化对应的实现类对象。循环输入任意个整数,输入0结束输入循环,对集合中的数据进行从大到小的排序后输出
- 解析 Java 类和对象的初始化过程(由一个单态模式引出的问题谈起)
- 传递对象时发现的一个有趣的小问题
- 一个循环问题
- 今天碰到的一个问题,关于通过基类对象的引用给子类赋值
- 请问各位高手,我出现了一个令我头痛的问题:在HibernateUtil类中创建SessionFactory总是失败:
- 一个有趣的java创建对象问题
- 关于table控件的一个疑难问题(涉及循环)
- 关于select对象在FireFox中的一个兼容性问题
- ASP.Net中用ViewState存储自定义复杂对象后类型转换的一个问题
- 向园子里的朋友探讨一个问题:如果判定一个对象已被处置
- Delphi 中 TStringlist.count 一个奇怪问题及其解决
- 终于发现自己存在的一个问题:关于用不用VC创建对象的问题
- 一个面向对象有趣的问题
- hiernate 中联合查询,得到的list是一个对象数组,这样需要进行适当处理来取值。