共计 755 个字符,预计需要花费 2 分钟才能阅读完成。
首先须要晓得的是,在 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);
}
这样不仅每次增加时防止掉了反复问题,也因为是局部变量在循环完结时会回收内存空间,防止了资源的节约。
正文完