从底层源码分析StringBuilder为什么比StringBuffer效率要高---面试必备

本文通过分析StringBuilder和StringBuffer的源码,揭示了两者在JDK版本更新后的底层实现差异。主要关注它们的构造方法和append方法。尽管两者都继承自AbstractStringBuilder,但StringBuffer在多线程环境下使用同步机制,导致在大量操作时效率低于StringBuilder。建议在单线程字符串修改场景中使用StringBuilder,多线程环境下选择StringBuffer。
摘要由CSDN通过智能技术生成

不积跬步无以至千里,凡是从小开始,把每一次当作第一次来做,抱着一颗学习,敬畏的心;

不罗嗦,直接干-----这里是以最新的JDK版本为例—虽然现在企业大部分用的是jdk1.8但是不耽误我分析呀…

public class Test {
   
    public static void main(String args[]) {
   
        StringBuilder stringBuilder= new StringBuilder();
        stringBuilder.append("abcdef");
        System.out.println(stringBuilder);

    }
}

代码倒是很简单,我们来看底层StringBuilder都干了些啥;

看构造方法—

以无参构造为例–

 public StringBuilder() {
   
        super(16);
    }

调用了父类的构造方法,然后传入了一个int类型的参数----

  AbstractStringBuilder(int capacity) {
   
        if (COMPACT_STRINGS) {
   
            value = new byte[capacity];
            coder = LATIN1;
        } else {
   
            value = StringUTF16.newBytesFor(capacity);
            coder = UTF16;
        }
    }

底层是确定编码格式LATIN1还是UTF16,不管什么字节码编码格式他们都做了一个动作,开辟了一个字节数组长度为16
所以第一行代码所开展的操作如下图所示–
在这里插入图片描述

接下来StringBuilder对象调用append方法

 public StringBuilder append(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeMartain

祝:生活蒸蒸日上!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值