問題:java開發時,當咱們使用List.add();循環添加數據,有時會出現前面添加的數據會被後面覆蓋的現象。這是怎麼回事尼?java
會覆蓋數據的代碼對象
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:
不會覆蓋數據的代碼blog
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()內)給我點贊鴨!