StringBuffer类和StringBuilder类的相关知识点

 首先这俩个类都是可变序列,与String类不同String类是不可变序列,StringBuffer和StringBuilder

他们是将数据存储在char value[] 待会会给大家看一下源码,这俩个类相当于是String类的升级版,它可以让我们对字符串的操作更加的便捷,也提供了很多便捷的方法比如

  1. append(): 在字符串末尾添加新的字符串。
  2. insert(): 在指定位置插入新的字符串。
  3. delete(): 删除指定范围内的字符。
  4. deleteCharAt(): 删除指定位置的字符。
  5. replace(): 替换指定范围内的字符。
  6. substring(): 截取指定范围内的字符。
  7. capacity(): 返回当前容量。
  8. length(): 返回当前长度。
  9. setCharAt(): 设置指定位置的字符。
  10. indexOf(): 返回指定字符串第一次出现的位置

但是这俩个我们推荐使用哪个呢,在正常情况下呢我们推荐使用StringBuilder来进行对我们字符串的修改,因为它的效率会比较高,但是StringBuilder是线程不安全的,在特殊的情况下还是得有StringBuffer,StringBudder它是线程安全的。

我们先来看一下这两者的体系图:

我们再来看一下它们的源码并进行简单的分析:

这里我们发现StringBuilder可以添加多种数据类型,通过方法重载的方式来进行判断,接下来我们看看它是如何将数据添加进去的:

这里我们可以发现当我们第一次创建StringBuilder的时候就会初始化char[]的长度为16;

当我们执行到append方法的时候发现我们添加数据是调用的super.append()

这里才是我们真正将数据存放进builder中的操作,我们上面知道刚创建的时候char[]的时候是直接是将长度扩展到16,但是如果长度超过16又是如何处理的呢,我们来看一下原理

这里我们发现count已经为3,又存储了一个17长度字符串,长度以及超过16接下来我们看一下如何扩容

这里就是我们扩容的代码逻辑,这里是通过if判断来进行是否需要扩容的判断,这里的minimumCapacity的值为20所以大于0进行扩容

通过copyof()方法来进行真正的扩容我们发现新的容量为原容量的2倍加2这就是StringBuilder的扩容原理。

StringBuffer跟StringBuilder的原理很像基本上都是一模一样的,所以这里大家有兴趣可以去DeBug一下。

相关推荐

  1. String 字符串编码 以及StringBuilder StringBuffer

    2023-12-06 16:06:06       32 阅读
  2. String、StringBufferStringBuilder之间区别

    2023-12-06 16:06:06       17 阅读
  3. String、StringBuilderStringBuffer区别以及应用场景

    2023-12-06 16:06:06       18 阅读
  4. String,StringBufferStringBuilder区别?

    2023-12-06 16:06:06       8 阅读
  5. StringBuilderStringBuffer区别是什么?

    2023-12-06 16:06:06       32 阅读
  6. 面试题:String 、StringBufferStringBuilder区别

    2023-12-06 16:06:06       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 16:06:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 16:06:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 16:06:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 16:06:06       20 阅读

热门阅读

  1. C++字符去除空格反转顺序输出

    2023-12-06 16:06:06       36 阅读
  2. 数据结构-堆

    2023-12-06 16:06:06       43 阅读
  3. 基数排序简单了解

    2023-12-06 16:06:06       36 阅读
  4. 基于Hadoop的异构网络协同过滤推荐算法设计

    2023-12-06 16:06:06       29 阅读
  5. 可以使用京东商品详情 API 获取哪些商品信息?

    2023-12-06 16:06:06       42 阅读
  6. Gson与FastJson详解

    2023-12-06 16:06:06       33 阅读
  7. (C++20) constinit常量初始化

    2023-12-06 16:06:06       41 阅读
  8. P5706 【深基2.例8】再分肥宅水

    2023-12-06 16:06:06       44 阅读
  9. AIOps、微服务和云平台

    2023-12-06 16:06:06       36 阅读
  10. 做题笔记:SQL Sever 方式做牛客SQL的题目--VQ29

    2023-12-06 16:06:06       34 阅读
  11. 蓝桥杯官网练习题(平均)

    2023-12-06 16:06:06       40 阅读
  12. vscode配置代码片段

    2023-12-06 16:06:06       35 阅读
  13. rocketmq 集群环境部署及与spring cloud 集成

    2023-12-06 16:06:06       30 阅读
  14. RepidJson将内容写入文件简单代码示例

    2023-12-06 16:06:06       35 阅读
  15. 深度学习中的Transformer机制

    2023-12-06 16:06:06       37 阅读