首先须要晓得的是,在 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);}

这样不仅每次增加时防止掉了反复问题,也因为是局部变量在循环完结时会回收内存空间,防止了资源的节约。