双大括号初始化在非 static 上下文中使用时可能会导致内存泄漏,因为它创建了一个将引用周围对象的匿名类。
与常规初始化相比,双大括号初始化的性能更差,因为它需要加载一个额外的类。
如果 equals()
方法不接受子类作为参数,还可能导致 equals()
比较失败。
此外,在 Java 9 以前的版本中,双大括号初始化不能与菱形运算符结合使用,因为它与匿名类不兼容。
示例:
List<Integer> list = new ArrayList<>() {{
add(1);
add(2);
}};
在应用快速修复后:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);