今天在项目开发中遇到一个有趣的问题,我把一个循环遍历一个List把它的对象赋值给另一个对象,再将这个对象放入List中,可是遍历完,List里面的对象数据完全是一样的,才突然意识到这个问题。
于是写了一段代码进行测试验证:
package Test;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/4/19.
*/
public class AddObjTest {
public static class Project{
private int id;
private String projectName;
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
public static void main(String[] s ){
List<Project> projectList=new ArrayList<>();
Project project=new Project();
for(int i=0;i<3;i++) {
project.setId(i+1);
project.setProjectName("项目"+i);
projectList.add(project);
}
System.out.print(projectList.toString());
}
}
debug了下,在添加到projectList中的project都是一样的,在添加的时候,其实添加的是project的引用,当project发生数据变化时,projectList的数据也会跟着变,Map,Set也是同理。这是对象的使用与普通数据类型不一样之处。