java – JLS示例3.10.5-1之间的区别.字符串文字和Oracle JDK?
发布时间:2020-12-15 01:04:09 所属栏目:Java 来源:网络整理
导读:规格 Java语言规范8的Example 3.10.5-1. String Literals告诉我们: 该程序由编译单元组成(第7.3节): package testPackage;class Test { public static void main(String[] args) { String hello = "Hello",lo = "lo"; System.out.print((hello == "Hello")
规格 Java语言规范8的Example 3.10.5-1. String Literals告诉我们: 该程序由编译单元组成(第7.3节):
和编译单位:
产生输出:
现实 但编译并运行oracle jdk 1.8.0_65(win)输出
问题1 为什么会有所不同? 问题2 这是规范或编译器或解释器中的错误吗? 如果有的话,在哪里举报? 版本
最佳答案
回答问题1
javac编译器在编译期间进行优化. 编译器将此识别为常量表达式:
并得出结论,这也必须是一个常量表达式:
因此假设整个项是interned作为字符串值常量表达式,我们将一个实习字符串与一个相等的实习字符串进行比较.因此,我们比较相同的引用并获得真实,并且可以将完整检查预先评估为真. 证据 >字节代码(javap -c)向我们显示我们有一些预先计算.来自1.,4.和5. print的表达式只是替换为“true”. 资源
输出:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |