栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

相同数据的浅拷贝问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

相同数据的浅拷贝问题

前段时间出过一个问题,在对一个list(Data是我的自己定的一个实体类)进行操作的时候,想在特定情况下改变list里内容的值。

   for (ExcelData data: dataList) {

                   if (data != null) {

                        if (data.getV() == null) {
                            data = list.get(data.getMc().getR()).get(data.getMc().getC());
                        } else {
                            data.setMc(null);
                        }
                    } else {
                        data = new ExcelData();
                    }
                    newData.add(data);
                }

不用太在意V、R、Mc是什么意思,这些是和前端控件对应的名字。要关注的是这里面用到了data.setXXX()方法,这是不对的。

出了问题后打断点发现,如果直接在对list的循环中直接用set()方法改变了其中一个数据的内容,同时也会改变另外一个数据的内容。两个数据是一摸一样的,所以猜测可能是java自己做了优化,从数据库中查出来的数据,如果是相同的数据java用了浅拷贝。

总结:如果要改变对象的数据,尽量new一个新对象,而不是用set方法来赋值。同时注意java可能出现的浅拷贝问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号