问答

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

作者:admin 2021-04-20 我要评论

package test;public class Test { public static void main(String[] args) { // 下面这行是不是用 StringBuilder 构造的字符串 String str = "This is " + new...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
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
}
###

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器