이중 중괄호 초기화 시 추가 클래스를 로드해야 하므로 일반 초기화보다 성능이 저하됩니다.
또한 equals() 메서드가 매개변수로 하위 클래스를 허용하지 않을 경우 equals() 비교가 실패할 수 있습니다.
이중 중괄호 초기화는 static이 아닌 컨텍스트에서는 메모리 누수를 일으킬 수 있습니다. Java 18보다 오래된 버전의 javac으로 컴파일링할 경우, 이러한 초기화가 자신을 둘러싼 객체를 참조하는 익명 클래스를 생성하기 때문입니다.
또한 Java 9 이전 버전에서 이중 중괄호 초기화는 익명 클래스와 호환되지 않아 다이아몬드 연산자와 결합할 수 없었습니다.
예:
List<Integer> list = new ArrayList<>() {{
add(1);
add(2);
}};
빠른 수정을 적용한 후:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);