关于字符串拼接的一个问题?

发布于 2022-09-12 22:45:20 字数 1241 浏览 31 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别靠近我心 2022-09-19 22:45:20

jdk9+?
jdk9以后变成了InvokeDynamic #0:makeConcatWithConstants

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文