当编写以下代码时:
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);
}