當下面的代碼寫的是:Java編譯器如何轉換包含自定義類的集合?
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < 10; i++)
list.add(i);
Java編譯器不會發出編譯錯誤,即使我們添加的ArrayList裏面一個int,因爲它轉換(通過使用包裝類整數)到下面的代碼:
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < 10; i++)
list.add(Integer.valueOf(i));
然而,當我有一個自定義類,我想存儲集合中的對象會發生什麼?更具體地說,什麼鑄造操作發生,並且這些操作可以被視爲額外的開銷。
那麼,下面的代碼:
Animal animal= new Animal();
ArrayList<Animal> list = new ArrayList<Animal>();
for (int i = 1; i < 10; i++){
animal.code=i;
list.add(animal);
animal= new Animal();
}
Animal temp;
for (int i = 1; i < 10; i++){
temp=list.get(i);
}
由JVM轉換爲這樣的事情:
Animal animal= new Animal();
ArrayList<Object> list = new ArrayList<Object>();
for (int i = 1; i < 10; i++){
animal.id=i;
list.add((Object)animal);
animal= new Animal();
}
Animal temp;
for (int i = 1; i < 10; i++){
temp=(Animal)list.get(i);
}
歡迎來到SO。好的第一個問題。要詳細瞭解泛型,請輸入erasure等,請查看:[Java泛型常見問題解答](http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html)。 –