zoukankan      html  css  js  c++  java
  • 利用加号+连接字符串详解

    之前一直在探讨利用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方法进行连接操作。

  • 相关阅读:
    ulimit
    python3.7安装Scrapy
    用VS2013写第一个汇编语言程序
    螺旋矩阵问题
    Java Web Pro与apache tomcat初始化关联
    记一次m3u8多个视频文件合并为整体法四(未加密)
    记一次m3u8多个视频文件合并为整体法三(未加密)
    记一次m3u8多个视频文件合并为整体法二(未加密)
    记将m3u8多个视频文件合并为整体法一(未加密)
    c++给定字符分割
  • 原文地址:https://www.cnblogs.com/duzhentong/p/7816566.html
Copyright © 2011-2022 走看看