StringBuffer与StringBuilder底层扩容机制与常用方法

 更新时间:2023年07月05日 10:28:15   作者:指挥官乄  
这篇文章主要给大家介绍了StringBuffer、StringBuilder底层扩容机制与常用方法,有感兴趣的小伙伴跟着小编一起来学习吧

StringBuffer 与 StringBuilder底层分析、扩容机制与常用方法

StringBuffer(线性安全)

  • 直接父类AbstractStringBuilder
  • 实现了Serializable,可以串行化
  • 在父类AbstractStringBuilder有属性char[] value 不是final类型,该value数字存放字符串内容,引出存放在堆中,所以在变化的时候不用每次都更改地址,创建新的对象,效率高
  • 是一个final类,不能被继承

StringBuffer构造方法

  • StringBuffer()初始容量为16
  • StringBuffer(int capacity) 初始容量为指定大小
  • StringBuffer(String str) 初始容量为指定字符串+16,注意是容量不是长度

StringBuffer扩容 (StringBuilder扩容机制一样)

扩容方式:2n+2

源码:

private int newCapacity(int minCapacity) {
        // overflow-conscious code
        int newCapacity = (value.length << 1) + 2;
        if (newCapacity - minCapacity < 0) {
            newCapacity = minCapacity;
        }
        return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
            ? hugeCapacity(minCapacity)
            : newCapacity;
    }

StringBuffer、StringBuilder的类继承结构图,两者的结构图是一样的

StringBuffer常用方法

  • 增 append
  • 删 delete(start,end)
  • 改 replace (start,end,string) ,string是要修改成的新内容
  • 查 indexOf(string) , string是要 查找的内容
  • 插入 insert
  • 获取长度 length() 注意有括号

StringBuilder (不安全)

  • 线程不安全,单线程优先使用,方法中没有synchronized修饰
  • 主要操作时append和insert,可以重载这些方法,可以接受任何类型的数据
  • 扩容机制与StringBuffer一样

String、StringBuffer、StringBuilder三者之间的区别

  • StringBuffer、StringBuilder 均代表可变字符串,方法一样
  • String:不可变字符序列,效率低,但是复用率高
  • StringBuffer:可变字符串、增删效率高,线性安全
  • StringBuilder:可变字符串、增删效率高,线性不安全

使用场景

1.如果字符串存在大量的修改操作,一般使用StringBuffer 或StringBuilder

2 . 如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder

3.如果字符串存在大量的修改操作,并在多线程的情况,使用 StringBuffer

4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等

到此这篇关于StringBuffer与StringBuilder底层扩容机制与常用方法的文章就介绍到这了,更多相关StringBuffer与StringBuilder扩容与用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 日期时间工具包–java.time的使用

    Java 日期时间工具包–java.time的使用

    这篇文章主要介绍了Java 日期时间工具包–java.time的使用,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04
  • 浅谈Java线程池的7大核心参数

    浅谈Java线程池的7大核心参数

    本篇文章基于正在看这篇文章的你已经具备了基本的Java并发的相关知识.如果对于Java并发编程一无所知的话,请先看看Java并发编程的一些前导基础知识,文中有非常详细的图文示例及代码,,需要的朋友可以参考下
    2021-05-05
  • Nacos入门过程的坑--获取不到配置的值问题

    Nacos入门过程的坑--获取不到配置的值问题

    这篇文章主要介绍了Nacos入门过程的坑--获取不到配置的值问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解Spring中REQUIRED事务的回滚机制详解

    详解Spring中REQUIRED事务的回滚机制详解

    在Spring的事务管理中,REQUIRED是最常用也是默认的事务传播属性,本文就来详细的介绍一下Spring中REQUIRED事务的回滚机制,感兴趣的可以了解一下
    2025-09-09
  • Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

    Spring Boot + MyBatis Plus 高效开发实战从入

    本文将详细介绍 Spring Boot + MyBatis Plus 的完整开发流程,并深入剖析分页查询、批量操作、动态 SQL、乐观锁、代码优化等实战技巧,感兴趣的朋友一起看看吧
    2025-04-04
  • 利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片

    利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片

    这篇文章主要为大家详细介绍了利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • SpringBoot实现网络限速的详细步骤

    SpringBoot实现网络限速的详细步骤

    本文详细介绍了网络限速的重要性及常见限速策略,如固定窗口计数器、滑动窗口计数器、令牌桶算法和漏桶算法,并重点讲解了如何在SpringBoot中使用AOP和令牌桶算法实现网络限速,通过自定义注解、面向切面编程和测试验证等步骤,需要的朋友可以参考下
    2026-04-04
  • 深入理解Java基础中的集合框架

    深入理解Java基础中的集合框架

    Java集合框架(Java Collections Framework, JCF)也称容器,这里可以类比 C++中的 STL,在这里主要对如下部分进行源码分析,及在面试中常见的问题,例如,在阿里面试常问到的 HashMap和ConcurrentHashMap原理等等,深入源码分析是面试中必备的技能
    2023-08-08
  • SpringBoot使用MyBatis的XML文件进行SQL语句编写

    SpringBoot使用MyBatis的XML文件进行SQL语句编写

    在现代 Java Web 开发中,Spring Boot 和 MyBatis 是两个非常流行的技术框架,本文将详细介绍如何在 Spring Boot 项目中使用 MyBatis 的 XML 文件来编写 SQL 语句,感兴趣的可以了解下
    2025-07-07
  • java实现酷狗音乐临时缓存文件转换为MP3文件的方法

    java实现酷狗音乐临时缓存文件转换为MP3文件的方法

    这篇文章主要介绍了java实现酷狗音乐临时缓存文件转换为MP3文件的方法,涉及java针对文件操作的相关技巧,需要的朋友可以参考下
    2016-08-08

最新评论