关于List添加对象重复问题/list内参数被修改引用地址

这是今天遇到的问题

今天利用list添加同一个引用地址的实体类具体代码如下:

问题代码

 List<WxMpTemplateMessage> list = new ArrayList<>();
        //获取运维角色对应的用户的openId
        List<User> userList = userService.list("0");
        for (WxMpTemplateMessage mpTemplateMessage : lstWxMpTemplate) {
            for (User user : userList) {
                auth auth = userAuthService.getModelByUserId(user.getId());
                //固定的模板ID通知
                mpTemplateMessage.setTemplateId(#模板ID);
                //修改对应的openId
                mpTemplateMessage.setToUser(auth.getOpenId());
                //打印toUser
                log.info( mpTemplateMessage.getToUser());
                list.add(mpTemplateMessage);
            }
        }
        //输出list添加的参数
         for (WxMpTemplateMessage wxTemplate : list) {
            log.info(wxTemplate.getToUser());
        }

输出结果
message:111oYxdD6AW2CrNRua
message:111oYxdD6K3MsvBt2c
message:111oYxdD6H6MNxDb
//最后输出list的值为list添加的最后一个值
message:333oYxdD6H6MNxDb
message:333oYxdD6H6MNxDb
message:333oYxdD6H6MNxDb

问题解决

 List<WxMpTemplateMessage> list = new ArrayList<>();
        //获取运维角色对应的用户的openId
        List<User> userList = userService.list("0");
        for (WxMpTemplateMessage mpTemplateMessage : lstWxMpTemplate) {
            for (User user : userList) {
                auth auth = userAuthService.getModelByUserId(user.getId());
                //固定的模板ID通知
                mpTemplateMessage.setTemplateId(#模板ID);
                //修改对应的openId
                mpTemplateMessage.setToUser(auth.getOpenId());
                 WxMpTemplateMessage news = BeanHelper.copyProperties(mpTemplateMessage, WxMpTemplateMessage.class);
                //打印toUser
                log.info( news.getToUser());
                list.add(news );
            }
        }
        //输出list添加的参数
         for (WxMpTemplateMessage wxTemplate : list) {
            log.info(wxTemplate.getToUser());
        }

输出结果
message:111oYxdD6AW2CrNRua
message:111oYxdD6K3MsvBt2c
message:111oYxdD6H6MNxDb
//输出正常
message:333oYxdD6AW2CrNRua
message:333oYxdD6K3MsvBt2c
message:33oYxdD6H6MNxDb

总结

这里出现的问题个人理解为当list进行add操作时添加的对象引用地址不能为同一个,否则会改变list里已经添加对象的值,最终导致List类的add()方法每次加入的都是对存放在堆中对象的引用地址。所以要谨记在日常编写过程中需要避免这种情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值