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