先看下面这段代码有什么问题么?
//处理学时
private List<KcxsEntity> setXsList(KcsqPage kcsqPage) {
List<KcxsEntity> kcxsList = new ArrayList<KcxsEntity>();
String llxs = kcsqPage.getLlxs();
String syxs = kcsqPage.getSyxs();
String sjxs = kcsqPage.getSjxs();
KcxsEntity xsEnt = new KcxsEntity();
xsEnt.setLx("1");
xsEnt.setDm("1");
xsEnt.setXss(llxs);
kcxsList.add(xsEnt);
xsEnt.setLx("1");
xsEnt.setDm("2");
xsEnt.setXss(syxs);
kcxsList.add(xsEnt);
xsEnt.setLx("1");
xsEnt.setDm("3");
xsEnt.setXss(sjxs);
kcxsList.add(xsEnt);
return kcxsList;
}
你觉得这段代码输出的结果是什么呢?结果值是不是重复?
答案在最下面,您先思考。
上面的代码误区就在于 “xsEnt” 是一个共用的实体类,是被引用的一个对象,即使你赋值了,但是后面再赋值,还是修改的最原始/被引用的那个 “xsEnt” 对象,所以会导致结果数据完全一样,永远存储的最后一个实体类的内容。
实体类、Map、List等都一样,只要是引用的对象都会这样。
正确的代码:
//处理学时
private List<KcxsEntity> setXsList(KcsqPage kcsqPage) {
List<KcxsEntity> kcxsList = new ArrayList<KcxsEntity>();
String llxs = kcsqPage.getLlxs();
String syxs = kcsqPage.getSyxs();
String sjxs = kcsqPage.getSjxs();
KcxsEntity xsEnt = new KcxsEntity();
xsEnt.setLx("1");
xsEnt.setDm("1");
xsEnt.setXss(llxs);
kcxsList.add(xsEnt);
xsEnt = new KcxsEntity();
xsEnt.setLx("1");
xsEnt.setDm("2");
xsEnt.setXss(syxs);
kcxsList.add(xsEnt);
xsEnt = new KcxsEntity();
xsEnt.setLx("1");
xsEnt.setDm("3");
xsEnt.setXss(sjxs);
kcxsList.add(xsEnt);
return kcxsList;
}

本文剖析了一段Java代码中因对象重复引用导致的数据错误,解释了为何在List中添加同一对象实例并多次修改会导致所有元素相同的问题。通过对比正确与错误的代码示例,深入浅出地讲解了Java中对象引用的工作机制。
176万+

被折叠的 条评论
为什么被折叠?



