Рассмотрите следующий код:
for(int i = 0;i < 200;i++)
{
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
add(i);
}};
// do something with currentList
}
currentList
? Мне просто любопытно :)
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
add(i);
}};
создает новый экземпляр анонимного класса каждый раз через ваш цикл, он не переопределяет или перезагружает класс каждый раз. Класс определяется один раз (при компиляционном времени) и загружается один раз (во время выполнения).
Не существует значительного использования производительности от использования анонимных классов.
Компилятор собирается преобразовать любой анонимный класс в именованный внутренний класс. Таким образом, ваш код будет преобразован во что-то типа:
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);
}