关于字符串拼接的一个问题?
package test;
public class Test {
public static void main(String[] args) {
// 下面这行是不是用 StringBuilder 构造的字符串
String str = "This is " + new Java();
System.out.println(str);
}
}
class Java {
@Override
public String toString() {
return "Java";
}
}
我虽然看不懂字节码,但是我在字节码里找不到 StringBuilder 这个类,那么上面的代码,那个字符串拼接是由谁完成的呢?
字节码文件:
Compiled from "Test.java"
public class test.Test {
public test.Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class test/Java
3: dup
4: invokespecial #3 // Method test/Java."<init>":()V
7: invokedynamic #4, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ltest/Java;)Ljava/lang/String;
12: astore_1
13: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;
16: aload_1
17: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
20: return
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
jdk9+?
jdk9以后变成了
InvokeDynamic #0:makeConcatWithConstants