往Vector,ArrayList添加多个对象会被覆盖,vectorarraylist
分享于 点击 11342 次 点评:265
往Vector,ArrayList添加多个对象会被覆盖,vectorarraylist
我在往Vector,ArrayList中添加多个对象的时候发现Vector,ArrayList中的所有元素和最后一个元素相同。本来是在刷一道ACM,遇到这个问题烦了我一天,测试了半天最后终于发现了原因。
如下代码:
//在for循环外面新建一个对象
_privilege prv1 = new _privilege();
for (i = 0; i < p; i++) {
str = sc.next();
prv1.category = str;
prv1.level = i;
m.privilege.add(prv1);//添加对象
}
这个时候会出现所有元素都重复的情况。
改一下就对了:
for (i = 0; i < p; i++) {
//在for循环里面新建对象
_privilege prv1 = new _privilege();
str = sc.next();
prv1.category = str;
prv1.level = i;
m.privilege.add(prv1);//添加对象
}
这个问题其实是对象的生命周期导致的,之所以会重复是因为对象的生命周期还没有结束就改变它的属性会导致后面的赋值覆盖前面的赋值。
把new对象放到循环内部以后就不存在这个问题了,因为这时候对象的生命周期在for循环的末尾,每次循环都会new一个对象。
相关文章
- 暂无相关文章
用户点评