使用List集合的add方法时,添加的所有元素都变成了最后一个添加的元素,原因:添加的是对象元素,List中记录的是地址值。

在实现购物车功能读取Cookie时,发现集合中的所有元素都被最后一个Cookie值覆盖。原因是循环中使用了同一个对象,导致所有列表项引用同一内存地址。解决方案是将对象创建放入for循环内,每次循环创建新的对象,避免所有列表元素共享同一状态。
摘要由CSDN通过智能技术生成

今天再写购物车时,读取Cookie放到List集合时出现,集合内容被最后一个元素覆盖。

解决方案:把对象创建放在for循环里面

例如:

class Num{
    private String num;

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }
}
//出现问题的代码
class test{
    public static void main(String[] args) {
        List<Num> list = new ArrayList<>();
        Num num = new Num();
        for (int i = 1; i <= 100; i++) {
            //100次循环的一直设置的是同一个的对象的地址值,
            //那么100次后所有指向这个地址值的Num对象中的num属性都会变成100
            num.setNum(String.valueOf(i));
            //这里一直添加的地址值都是同一个,因此对象中的num属性都是100
            list.add(num);
        }
    }
}
//解决方案
class test02{
    public static void main(String[] args) {
        List<Num> list = new ArrayList<>();
        
        for (int i = 1; i <= 100; i++) {
            //100次循环创建100个对象,有100个的地址值,
            Num num = new Num();
            num.setNum(String.valueOf(i));
            list.add(num);
        }
    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值