Java中使用+号连接字符串和使用StringBuilder的append方法连接字符串的联系和区别

一、使用+连接字符串的底层原理

我们先来看看这样一段代码

public class Main {
    public static void main(String[] args) {
        String mango = "mango";
        String s = "abc" + mango + "def" + 47;
        System.out.println(s);
    }
}

我们用jdk自带的工具javap来反编译以上代码:

javap -c Main

这里的c代表生成字节码,生成的字节码如下所示:
![在在这里插入图片描述
由以上字节码我们可以看出,首先根据“abc”字符串调用StringBuilder的构造函数生成一个StringBuilder对象,再依次调用StringBuilder类的append方法来实现字符串的连接,最后调用StringBuilder的toString方法将StringBuilder对象转化为String对象赋值给s,所以理论上来说在这种情形下用+连接字符串和用StringBuilder的append方法来连接字符串是差不多的。

二、循环情形下的+连接和append连接的区别

    public String useAdd(String[] params){
        String result = "";
        for(int i=0;i<params.length;i++){
            result = result + params[i];
        }
        return result;
    }
    public String useAppend(String[] params){
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<params.length;i++){
            sb.append(params[i]);
        }
        return sb.toString();
    }

先来看看useAdd方法的字节码:
在这里插入图片描述
可以看出,第五行到第三十五行构成了一个循环体,也就是说每经过一次循环都需要新建一个StringBuilder对象,而原来的StringBuilder对象则成为了垃圾,等待垃圾回收器的回收,但是垃圾回收机制是周期性运行的,也就是说当循环量较大时会造成大量的内存消耗,使得程序的性能降低

再来看看useAppend方法的字节码,该方法只使用了StringBuilder类的append方法来进行字符串的连接操作
在这里插入图片描述

第十行和第27行之间构成了一个循环体,而StringBuilder对象的创建在第四行,也就是说这种方法不会重复创建StringBuilder对象,不存在+连接字符串而带来的内存消耗问题。

当用循环体连接字符串最好不要用+,用StringBuilder或许是一种更好的选择,这就是两者的区别啦!!!觉得有道理的点个赞呗。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值