关于 Java lambda 相等和/或实例化[重复]

2024-01-25

为什么下面的代码片段在第二次通过时打印 true ?不应该是一个新实例吗?

import java.util.function.Supplier;

public class Foo {
    public static void main(String[] args) throws Exception {
        Supplier<Long> old = () -> System.nanoTime();

        for (int i = 0; i < 3; i++) {
            /* false true true
            Supplier<Long> foo = System::nanoTime;*/

            Supplier<Long> foo = () -> System.nanoTime();

            /* false false false
            Supplier<Long> foo = new Supplier<Long>() {
                @Override
                public Long get() {
                    return System.nanoTime();
                }
            };
            //*/

            System.out.printf("%s %s %s%n", foo == old, foo, old);

            old = foo;
        }
    }
}
false Foo$$Lambda$2/122883338@1ddc4ec2 Foo$$Lambda$1/1534030866@133314b
true Foo$$Lambda$2/122883338@1ddc4ec2 Foo$$Lambda$2/122883338@1ddc4ec2
true Foo$$Lambda$2/122883338@1ddc4ec2 Foo$$Lambda$2/122883338@1ddc4ec2

看看这个article http://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood关于 lambda 的实现方式。

本质上编译器把你的两个System.nanoTime()进入类中的以下静态方法:

static Long lambda$1() {
    return System.nanoTime();
}

static Long lambda$2() {
    return System.nanoTime();
}

然后创建对每个目标类型的常量引用Supplier<Long>使用LambdaMetaFactory https://docs.oracle.com/javase/8/docs/api/java/lang/invoke/LambdaMetafactory.html。坦率地说,我很失望 Java 编译器没有意识到 lambda 主体是相同的并且只创建一个实例。如果 Java 编译器足够聪明,每一行都应该打印true!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 Java lambda 相等和/或实例化[重复] 的相关文章

随机推荐

  • Python 和 Pylance VS Code 扩展之间有什么区别?

    我刚刚从老朋友 Sublime 转向 VSCode 我真的很喜欢它的工作方式和它所具有的功能 我是一名 Python 开发新手 我发现了 VSCode 的两个流行的 python 扩展 Python 和 PyLance 我的问题是 Pyth
  • FileSystemWatcher OnChanged 事件需要重新加入 UI 线程

    如何在 FileSystemWatcher 中获取 OnChanged 事件 以便在 OnChanged 事件完成后调用 UI 线程上的方法 或者 只是为了了解知识 如何让 OnChanged 事件完全在 UI 线程上运行 如果你想File
  • Java HttpSession

    java servlet中的HttpSession是在之后才创建的吗 HttpSession s request getSession 在我的代码中我没有这样写 但是当我使用时if request getSession false null
  • Ufw 防火墙阻止 kubernetes(使用 calico)

    我正在尝试在我的服务器 Debian 10 上安装 kubernetes 集群 在我的服务器上 我使用 ufw 作为防火墙 在创建集群之前 我在 ufw 上允许了这些端口 179 tcp 4789 udp 5473 tcp 443 tcp
  • Apache的Mesos和Google的Kubernetes有什么区别

    Apache的Mesos和Google的Kubernetes到底有什么区别 据我了解 两者都是服务器集群管理软件 任何人都可以详细说明主要区别在哪里 什么时候会首选哪个框架 你为什么要使用Kubernetes 位于 Mesosphere 之
  • 设置已发布的 npm 项目的“根”

    我正在发布一个名为的 npm 包foo到 npm 注册表 我使用compile to js 语言编写了该包 为了理智起见 我将编译的输出放入dist 项目目录的文件夹 我的package json将入口点列出为dist entry js n
  • Azure Web Apps 是否在多个实例之间共享磁盘?

    根据大卫 埃博 David Ebbo 在Azure 运行时环境 https github com projectkudu kudu wiki Azure runtime environment file system本文中 当您启动 2 个
  • 为什么“du”的输出通常与“du -b”如此不同

    为什么输出是du通常与du b b是简写 apparent size block size 1 仅使用 apparent size大多数时候给我相同的结果 但是 block size 1似乎可以解决问题 我想知道输出是否正确 哪些数字是我想
  • docker compose 会自动创建端口映射吗?

    我在 Visual Studio 2019 中创建了一个简单的 asp net core 应用程序并添加了 docker 支持 Dockerfile dockerignore 和 docker compose 文件均已创建 在命令提示符中
  • 数据库设计:跟踪每个用户的大量属性。如此之多,我可能会用完列(行存储空间)

    对于我所关心的问题 我希望得到一些意见 我的数据库中有一个 User 表 其中包含您期望的基本内容 例如用户名 密码等 该应用程序要求我跟踪每个用户的大量属性 如此之多 我可能会用完列 行存储空间 我很想添加一个包含 UserID Prop
  • 无需显式定义要抓取的每个字段即可抓取数据

    我想抓取一页数据 使用 Python Scrapy 库 而不必定义页面上的每个单独字段 相反 我想使用动态生成字段id元素的名称作为字段名称 起初我认为最好的方法是建立一个收集所有数据的管道 并在收集完所有数据后将其输出 然后我意识到我需要
  • Erlang:使用 gen_tcp:controlling_process 避免竞争条件

    我正在按照以下顺序实现简单的 tcp 服务器 ok LS gen tcp listen Port active true reuseaddr true mode list ok Socket gen tcp accept LS Pid sp
  • 当区域性可变时,格式化不带年份的本地化日期

    我需要根据当前设置的区域性将日期显示在 M dd 或 dd M 中 在我们的应用程序中 我们明确设置基于配置的区域性 目前 我们使用以下方法格式化日期 string dateStringFormat Thread CurrentThread
  • OpenCV 在图像上运行 kmeans 算法

    我试图在 3 通道彩色图像上运行 kmeans 但每次我尝试运行该函数时 它似乎都会崩溃并出现以下错误 OpenCV Error Assertion failed data dims lt 2 type CV 32F K gt 0 in u
  • VC2008中整个程序优化失败

    我有一个在 VS2008 下编译的相当大的 C 程序 11mb exe 并且有兴趣了解整个程序优化是否会显着影响其性能 然而 打开整个程序优化和链接时代码生成会导致链接失败 如下所示 1 gt c cpp Win32 Atlas tin T
  • 如何使应用程序移动到 SD 卡(并仍然支持 android < 2.2)?

    如何将我的应用程序移至 SD 卡 编辑标题以使问题与给出的答案更相关 你必须设置android installLocationAndroidManifest xml 文件中的条目 preferExternal or auto价值观就可以了
  • 高效创建三对角矩阵

    如何创建一个二次带矩阵 其中给出对角线以及对角线下方和上方的第一个对角线 我正在寻找类似的功能 tridiag upper lower main where length upper length lower length main 1并返
  • 将基本 3D 模型导入 OpenGL 应用程序

    好吧 我正在做简单的 OpenGL ES 编程 当我说简单时 我所做的最复杂的事情只不过是美化的斜角立方体和 L 形 想想俄罗斯方块 但在 3D 中 但是 将所有顶点数据放入应用程序中要么是 a 手动编码 啊 要么 b 第 3 方游戏引擎
  • Drupal 7 hook_theme() 不加载模板文件

    我想得到一个very使用 drupal 的 hook theme 加载模板文件的简单模块 这几乎和你想象的一样简单 function sectionheader theme existing type theme path return a
  • 关于 Java lambda 相等和/或实例化[重复]

    这个问题在这里已经有答案了 为什么下面的代码片段在第二次通过时打印 true 不应该是一个新实例吗 import java util function Supplier public class Foo public static void