gpt4 book ai didi

Java 8 - 与匿名类不同,不会为 lambda 创建新对象

转载 作者:行者123 更新时间:2023-12-02 04:15:18 25 4
gpt4 key购买 nike

我注意到与匿名类不同,在 lambda 的情况下不会创建新对象。有人可以帮我理解这一点吗?

    //case 1: anonymous class
for (int i = 0; i < 3; i++) {
Runnable r = new Runnable() { @Override public void run() { System.out.println("blah");}};
System.out.println("Anonymous: " + r.hashCode());
}

//case 2: lambdas
for (int i = 0; i < 3; i++) {
Runnable r = () -> System.out.println("blah");
System.out.println("Lambda: " + r.hashCode());
}

打印

Lambda: 1915503092
Lambda: 1915503092
Lambda: 1915503092
Anonymous: 1535128843
Anonymous: 1567581361
Anonymous: 849460928

最佳答案

未指定优化 lambda 时 JVM 的确切行为。 HotSpot JVM 通过为无状态 lambda 创建单例来优化它们。

请参阅“Lambda 表达式每次执行时都会在堆上创建对象吗?”的答案详情:https://stackoverflow.com/a/27524543/281469

关于Java 8 - 与匿名类不同,不会为 lambda 创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33390860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com