先看下面这段代码有什么问题么?
//处理学时
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;
}