次のコードが記述されている場合:
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < 10; i++)
list.add(i);
Java コンパイラは、arrayList 内に int を追加しても、(Wrapper Class Integer を使用して) 次のコードに変換するため、コンパイル エラーを発行しません。
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);
}