请考虑以下代码:
for(int i = 0;i < 200;i++)
{
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
add(i);
}};
// do something with currentList
}
currentList
的类? 我只是好奇:)
答案 0 :(得分:15)
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
add(i);
}};
每次通过循环时,都会创建匿名类的新实例,而不是每次都重新定义或重新加载类。该类定义一次(在编译时),并加载一次(在运行时)。
使用匿名类没有显着的性能损失。
答案 1 :(得分:15)
编译器将把任何匿名类转换为命名的内部类。因此,您的代码将转换为以下内容:
class OuterClass$1 extends ArrayList<Integer> {
OuterClass$1(int i) {
super();
add(i);
}
}
for (int i = 0; i < 200; i++) {
ArrayList<Integer> currentList = new OuterClass$1(i);
}