10

考虑以下代码:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
  • Java 将如何对待 的类currentList
  • 对于 200 个对象中的每一个,它会认为它是一个不同的类吗?
  • 即使在创建第一个对象之后,它也会对性能造成影响吗?
  • 它是否以某种方式缓存它?

我只是好奇 :)

4

2 回答 2

15
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};

每次都通过循环创建匿名类的新实例,而不是每次都重新定义或重新加载该类。该类定义一次(在编译时),并加载一次(在运行时)。

使用匿名类对性能没有显着影响。

于 2010-01-12T17:10:31.900 回答
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);
}
于 2010-01-12T17:11:16.220 回答