java中List的add方法添加对象时都是最后的一条记录
list中添加对象
1 import java.util.ArrayList; 2 import java.util.List; 3 public class ListTest{ 4 public static void main(String [] args) 5 { 6 Cat cat1=new Cat("hello"); 7 Cat cat2=new Cat("java"); 8 Cat cat3=new Cat("world"); 9 List<Cat> catList=new ArrayList<>(); 10 catList.add(cat1); 11 catList.add(cat2); 12 catList.add(cat3); 13 14 Cat cat4=new Cat(); 15 List<Cat> newcatList=new ArrayList<>(); 16 for(int j=0;j<catList.size();j++){ 17 cat4.setterName(catList.get(j).getterName()==null?"":catList.get(j).getterName()); 18 newcatList.add(cat4); 19 System.out.println("NO"+j+". address in memory"+newcatList.get(j)); 20 } 21 for(int i=0;i<catList.size();i++) 22 { 23 System.out.println("when define the Class Cat outside the foreach"); 24 System.out.print(newcatList.get(i).name); 25 System.out.println(); 26 } 27 } 28 } 29 30 class Cat{ 31 String name; 32 Cat(){ 33 34 } 35 Cat(String name){ 36 this.name=name; 37 } 38 public void setterName(String name){ 39 this.name =name; 40 } 41 public String getterName(){ 42 return this.name; 43 } 44 }
运行上诉代码,可以看到每次加入到list中的都是同一个对象的地址。
查看源代码
我们传递给add方法的是猫类的引用,所以传的是一个内存地址,在for循环外部定义一个对象的引用,在for循环内我们没有改变过引用的指向,所以添加到list中的就是同一个对象的地址,如果希望传递不同的对象,则需要在for循环内部声明并创建新的猫类对象即可