《深入理解Java虚拟机》第二版 中的关于intern()的一个坑

深入理解Java虚拟机》第二版 中的关于intern()的一个坑
详细的可以看《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

其实本不必再写一篇,不过这个坑也确实疑惑我了,多写一篇 让更多的人看到

在这里插入图片描述
你倒是告诉我哪里出现过嘛!!!!!!!!!!!!!

在第三版上已经对此问题说明了。
是在sum.misc.Version里面的launcher_name字段的值就是“java”:
在这里插入图片描述

在这里插入图片描述
到此就真相大白了。

Java标准库在JVM启动过程中会调用sun.misc.Version的init()方法。所以sun.misc.Version会进行类加载的操作,而类加载的初始化阶段时,会对静态常量字段进行真正的赋值操作,但是由于sun.misc.Version的launcher_name字段是final修饰的,所以引用的字符串“java”在准备阶段就被intern到了字符串常量池里面了

另外,在OpenJdk JDK8u212-b03中

在这里插入图片描述
是因为其改成了
在这里插入图片描述
在这里插入图片描述

==== 吃井不忘挖水人

@why技术 写文章刨根究底,语言诙谐,配图多,堪称看段子
why技术
@RednaxelaFX是个狠人 向RednaxelaFX致敬
RednaxelaFX

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值