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循環內部聲明並創建新的貓類對象即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM