問題:java開發時,當我們使用List.add();循環添加數據,有時會出現前面添加的數據會被后面覆蓋的現象。這是怎么回事尼?
會覆蓋數據的代碼
package com.boot.test;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class StudentVo {
private String name;
private String age;
public static void main(String [] args){
List<Student> students = new ArrayList<Student>();
students.add(new Student("a","1"));
students.add(new Student("b","2"));
for(int i=0;i<students.size();i++){
System.out.println(students.get(i));
}
System.out.println("--------------------------------");
List<StudentVo> studentLists = new ArrayList<StudentVo>();
/**下面是重點 對象在這里創建時會覆蓋數據*/
StudentVo studentVo = new StudentVo();
for(int j=0;j<students.size();j++){
studentVo.setName(students.get(j).getName());
studentVo.setAge(students.get(j).getAge());
studentLists.add(studentVo);
}
/**打印結果*/
for(int k=0;k<studentLists.size();k++){
System.out.println(studentLists.get(k));
}
}
}
console:
不會覆蓋數據的代碼
package com.boot.test;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class StudentVo {
private String name;
private String age;
public static void main(String [] args){
List<Student> students = new ArrayList<Student>();
students.add(new Student("a","1"));
students.add(new Student("b","2"));
for(int i=0;i<students.size();i++){
System.out.println(students.get(i));
}
System.out.println("--------------------------------");
List<StudentVo> studentLists = new ArrayList<StudentVo>();
for(int j=0;j<students.size();j++){
/**此時對象在這里創建 不會覆蓋數據*/
StudentVo studentVo = new StudentVo();
studentVo.setName(students.get(j).getName());
studentVo.setAge(students.get(j).getAge());
studentLists.add(studentVo);
}
/**打印結果*/
for(int k=0;k<studentLists.size();k++){
System.out.println(studentLists.get(k));
}
}
}
console:
總結:會出現這兩種不同結果的原因是 對象創建位置的不同導致。 程序一 整個執行過程中只創建了一個對象,所以數據會被后面的覆蓋。程序二 執行過程中創建了多個對象,數據互不干擾,所以數據不會被覆蓋。
所以創建實體類對象的位置是導致該問題的根本原因(要在for()內)
給我點贊鴨!