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