Java是否“缓存”匿名类?

请考虑以下代码:

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

我只是好奇 :)

 ArrayList currentList = new ArrayList() {{ add(i); }}; 

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

使用匿名类没有显着的性能损失。

编译器将任何匿名类转换为命名的内部类。 因此,您的代码将转换为以下内容:

 class OuterClass$1 extends ArrayList { OuterClass$1(int i) { super(); add(i); } } for (int i = 0; i < 200; i++) { ArrayList currentList = new OuterClass$1(i); }