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循环内部声明并创建新的猫类对象即可

原文地址:https://www.cnblogs.com/raychou1995/p/10065918.html