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); }