List循环add时会覆盖之前的数据
List<Demo> li = new List<Demo>();
Demo d = new Demo();
for(Demo d:li){
d = "XXX";
li.add(d);
}
此时li数组add的数据会被最后遍历的数据覆盖
解决办法
List<Demo> li = new List<Demo>();
for(Demo d:li){
Demo d = new Demo();
d = "XXX";
li.add(d);
}
将遍历时要add的实体类放到循环内让它每次遍历是都实例化一次
原因:已经在循环外new了一个对象,该对象的地址在内存空间已经分配,保存到了固定的位置,在使用add方法时,会增加值的个数,但引用地址不变,所以最后遍历的数据会将之前的数据覆盖。
注意:如果为数值对象时,情况不一样,数值对象保存一组不会改变的量,当需要使用这个对象时,会在系统中分配另一个空间。因此,数值对象使用add方法时不会出现覆盖问题。