gpt4 book ai didi

java - Java 中的字符串实习

转载 作者:行者123 更新时间:2023-12-01 19:42:21 26 4
gpt4 key购买 nike

我正在观看 Udemy 上的在线类(class),其中讲师提供了以下字符串实习示例。

示例 1:

String s1 = "hel" + "lo"; // This is interned by JVM

示例 2:

String s1 = "lo";
String s2 = "hel" + s1 ; // This is not interned automatically by JVM

上面两个代码片段有什么区别?为什么一个被拘留而另一个没有被拘留?

根据讲师的解释,在第一个示例中,s1的值在编译时已知,但在第二个示例中 s2 的值在运行时已知。这是为什么?

最佳答案

您可以使用 javap -v <file>.class 命令查看生成的字节码。

查看 Java 11 字节码,第一个示例是通过 javac 进行优化的编译器:

Code:
stack=1, locals=2, args_size=1
0: ldc #2 // String hello
2: astore_1
3: return

第二个示例未完全优化,invokedynamic用于构造第二个字符串:

Code:
stack=1, locals=3, args_size=1
0: ldc #2 // String lo
2: astore_1
3: aload_1
4: invokedynamic #3, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
9: astore_2
10: return

关于java - Java 中的字符串实习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908888/

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