利用加号+连接字符串详解

之前一直在探讨利用new关键字创建String对象的个数,没有想过利用+连接字符串虚拟机是怎么实现的,下面利用jdk自带的反编译命令javap看一下String的执行过程

例1:

           String s1 = "a";
        String s2 = "b";
        String s3 = "a" + "b";


先看直接用+连接两个字符串虚拟机是怎么执行的,在命令提示符下进入到class所在的文件夹下输入javap -v Test.class(程序所在的class文件)

经过查看发现利用+直接连接两个字符串常量,虚拟机会直接把这两个字符串连接起来看成一个字符串

例2:


          String s1 = "a";
        String s2 = "b";
        String s3 = s1 + s2;


利用+连接两个引用,虚拟机看成StringBuilder,会创建一个StringBuilder对象,然后调用append方法进行追加操作,最后调用toString方法转换成String

例3:

        String s4 = new String("s");
        String s5 = new String("v");
        String s6 = s4 + s5;


用+连接两个new创建的String对象,虚拟机也是会看成一个StringBuider进行append操作,最后执行toString

例4:

        String s7 = "a";
        String s8 = new String("h");
        String s9 = s7 + s8;


当连接一个字符串常量和一个引用也是会看成StringBuilder进行操作


总结:当+两边连接的是字符串常量时,虚拟机会直接进行优化,看成一个字符串,当+的一边是引用的时候,虚拟机就会创建StringBuilder,利用append方法进行连接操作。

原文地址:https://www.cnblogs.com/duzhentong/p/7816566.html