首先需要知道的是,在 add 方法里面,对于引用类型的对象,存放的是引用类型的地址,尤其是当我们使用 new 出来的对象并调用集合中的 add 方法来添时,当改变了该对象的属性,但该对象的地址并没有改变,所以当对象里面的属性改变的时,原本存放在集合里面的内容也会跟着一起改变,并在添加的过程中添加重复的内容放集合中去,避免的方法就是每次添加的时候重新 new 来开辟新的内存空间来保存对象信息,若需要添加多个,则应当在循环里面定义。
举例说明👇
//定义一个老师,赋予值
Teacher teacher = new Teacher("Mike","男");
//存放老师
List<Teacher> teacherList = new ArryList();
teacherList.add(teacher);
这个时候集合里面只有 Mike 老师的信息,接着
//把 teacher 重新赋值添加到集合中
teacher.setName("Marry");
teacher.setSex("女");
teacherList.add(teacher);
这个时候就需要注意了,由于 teacher 对象并没有改变内存中的地址,所以此时集合中存放着的 Mike 的信息就会比变成 Marry 的信息,在调用 add 方法后又会继续添加一个 Marry 老师到集合中去,造成了俩个 Marry 在集合当中。正确的做法:
//添加时重新 new Teacher 对象
for(int i = 0,i<length;i++){
Teacher teacher = new Teacher();
teacher.setName("Marry");
teacher.setSex("女");
teacherList.add(teacher);
}
这样不仅每次添加时避免掉了重复问题,也因为是局部变量在循环结束时会回收内存空间,避免了资源的浪费。