一段简单的遍历中, List.forEach中的临时变量不能用来赋值,因为它是个临时的复制,
求大佬解答下代码出错在那里
首先是一个简单的类:
public class ImportDataBean {
private String name;
private Object value;
public ImportDataBean(String name) {
this.name = name;
}
@Override
public String toString(){
return "\n name: "+name +" value: " +value;
}
public ImportDataBean() {
}
}
最后是遍历代码:
public static void main(String[] args) {
List<ImportDataBean> importHeadList=new ArrayList();
List<ImportDataBean> importBodyList=new ArrayList();
ImportDataBean importDataBean1=new ImportDataBean("名称");
ImportDataBean importDataBean2=new ImportDataBean("备注");
ImportDataBean importDataBean3=new ImportDataBean("创建时间");
importHeadList.add(importDataBean1);
importHeadList.add(importDataBean2);
importHeadList.add(importDataBean3);
for (int i=0;i<importHeadList.size();i++){
for(ImportDataBean importDataBean:importHeadList){
importDataBean.setValue(i);
importDataBean.setName(importDataBean.getName());
//System.out.println(importDataBean.toString());
importBodyList.add(importDataBean);
//ImportDataBean importDataSetBean=new ImportDataBean();
//importDataSetBean.setValue(i);
//importDataSetBean.setName(importDataBean.getName());
//importBodyList.add(importDataSetBean);
}
}
for (ImportDataBean importDataBean:importBodyList){
System.out.println(importDataBean.toString());
}
}
觉得我这段代码有什么问题吗?没错,直接用 ForEach的临时变量操作是不是有点不妥,
贴一下执行结果:
可以看到 name的赋值还正常, value的赋值都变成2
这让我有点懵圈,如果正常的 重新 New一个 ImportDataBean 对象用于赋值,输出结果是没有问题的
如果把注释的输出放开
importDataBean.setValue(i);
importDataBean.setName(importDataBean.getName());
System.out.println(importDataBean.toString());
importBodyList.add(importDataBean);
输出结果:
红色标红就是遍历中的 print了,这是为什么呢,Name没有错,但是value