编程有一条原则如下:
避免创建不必要的对象:最好能重用对象,而不要在每次需要的时候就创建一个相同功能的新对象。
请看如下代码:
List names = Arrays.asList("peter", "anna", "mike", "xenia");
// 1、匿名内部类
Collections.sort(names, new Comparator() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
//2、lambda表达式
Collections.sort(names, (a, b) -> b.compareTo(a));
是不是每次排序都创建了一个新的Comparator对象,导致性能降低?那么还主张使用Lambda表达式吗?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
每次排序并不会创建一个新的
Comparator对象,一般情况下 Lambda 表达式对应的实例(instance)一旦在内存中产生,那么 JVM 在当前环境下会重复使用这个实例。具体的说明,可以参考这个链接:Run-Time Evaluation of Lambda Expressions在可以提升程序可读性和开发效率的前提下,主张使用 Lambda 表达式
可以静态声明一个Lambda表达式内部匿名类对象;
朝生夕灭的小对象对JVM来说不是大问题;