今天写程序,发现经常容易犯的问题,就是java对象传值问题,如以下两端代码:
Model model=new Model(); model.setModelName(modelName); model.setIndex(preModelNumber); preModelNumber++; List<ViewPoint> temp=new ArrayList<>(); for(int i=0;i<Points.size();i++){ ViewPoint vp=new ViewPoint(); vp.setOrder(Points.get(i).getOrder()); vp.setAbsX(Points.get(i).getAbsX()); vp.setAbsY(Points.get(i).getAbsY()); vp.setAbsZ(Points.get(i).getAbsZ()); temp.add(vp); } model.setPoints(temp); fieldModelXml.getItemModel().add(model);
Model model=new Model(); model.setModelName(modelName); model.setIndex(preModelNumber); preModelNumber++; List<ViewPoint> temp=new ArrayList<>(); ViewPoint vp=new ViewPoint(); for(int i=0;i<Points.size();i++){ vp.setOrder(Points.get(i).getOrder()); vp.setAbsX(Points.get(i).getAbsX()); vp.setAbsY(Points.get(i).getAbsY()); vp.setAbsZ(Points.get(i).getAbsZ()); temp.add(vp); } model.setPoints(temp); fieldModelXml.getItemModel().add(model);
表面只是vp定义在里外的区别,但是实际上完全不同效果,第一段代码每次循环,vp都会销毁重新创建,不会出现赋值同一对象问题。而第二段
代码循环中,vp没有被销毁,最后的结果就是所有的tem中都被赋值了vp的引用,最后所以temp中的值都为循环最后一个赋值,导致不想要的结果。这一点要多注意