StringBuffer與StringBuilder底層擴(kuò)容機(jī)制與常用方法
StringBuffer 與 StringBuilder底層分析、擴(kuò)容機(jī)制與常用方法
StringBuffer(線性安全)
- 直接父類AbstractStringBuilder
- 實(shí)現(xiàn)了Serializable,可以串行化
- 在父類AbstractStringBuilder有屬性char[] value 不是final類型,該value數(shù)字存放字符串內(nèi)容,引出存放在堆中,所以在變化的時(shí)候不用每次都更改地址,創(chuàng)建新的對象,效率高
- 是一個(gè)final類,不能被繼承
StringBuffer構(gòu)造方法
- StringBuffer()初始容量為16
- StringBuffer(int capacity) 初始容量為指定大小
- StringBuffer(String str) 初始容量為指定字符串+16,注意是容量不是長度
StringBuffer擴(kuò)容 (StringBuilder擴(kuò)容機(jī)制一樣)
擴(kuò)容方式: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的類繼承結(jié)構(gòu)圖,兩者的結(jié)構(gòu)圖是一樣的

StringBuffer常用方法
- 增 append
- 刪 delete(start,end)
- 改 replace (start,end,string) ,string是要修改成的新內(nèi)容
- 查 indexOf(string) , string是要 查找的內(nèi)容
- 插入 insert
- 獲取長度 length() 注意有括號
StringBuilder (不安全)
- 線程不安全,單線程優(yōu)先使用,方法中沒有synchronized修飾
- 主要操作時(shí)append和insert,可以重載這些方法,可以接受任何類型的數(shù)據(jù)
- 擴(kuò)容機(jī)制與StringBuffer一樣
String、StringBuffer、StringBuilder三者之間的區(qū)別
- StringBuffer、StringBuilder 均代表可變字符串,方法一樣
- String:不可變字符序列,效率低,但是復(fù)用率高
- StringBuffer:可變字符串、增刪效率高,線性安全
- StringBuilder:可變字符串、增刪效率高,線性不安全
使用場景
1.如果字符串存在大量的修改操作,一般使用StringBuffer 或StringBuilder
2 . 如果字符串存在大量的修改操作,并在單線程的情況,使用 StringBuilder
3.如果字符串存在大量的修改操作,并在多線程的情況,使用 StringBuffer
4.如果我們字符串很少修改,被多個(gè)對象引用,使用String,比如配置信息等
到此這篇關(guān)于StringBuffer與StringBuilder底層擴(kuò)容機(jī)制與常用方法的文章就介紹到這了,更多相關(guān)StringBuffer與StringBuilder擴(kuò)容與用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 日期時(shí)間工具包–java.time的使用
這篇文章主要介紹了Java 日期時(shí)間工具包–java.time的使用,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-04-04
詳解Spring中REQUIRED事務(wù)的回滾機(jī)制詳解
在Spring的事務(wù)管理中,REQUIRED是最常用也是默認(rèn)的事務(wù)傳播屬性,本文就來詳細(xì)的介紹一下Spring中REQUIRED事務(wù)的回滾機(jī)制,感興趣的可以了解一下2025-09-09
Spring Boot + MyBatis Plus 高效開發(fā)實(shí)戰(zhàn)從入
本文將詳細(xì)介紹 Spring Boot + MyBatis Plus 的完整開發(fā)流程,并深入剖析分頁查詢、批量操作、動(dòng)態(tài) SQL、樂觀鎖、代碼優(yōu)化等實(shí)戰(zhàn)技巧,感興趣的朋友一起看看吧2025-04-04
利用openoffice+jodconverter-code-3.0-bate4實(shí)現(xiàn)ppt轉(zhuǎn)圖片
這篇文章主要為大家詳細(xì)介紹了利用openoffice+jodconverter-code-3.0-bate4實(shí)現(xiàn)ppt轉(zhuǎn)圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
SpringBoot實(shí)現(xiàn)網(wǎng)絡(luò)限速的詳細(xì)步驟
本文詳細(xì)介紹了網(wǎng)絡(luò)限速的重要性及常見限速策略,如固定窗口計(jì)數(shù)器、滑動(dòng)窗口計(jì)數(shù)器、令牌桶算法和漏桶算法,并重點(diǎn)講解了如何在SpringBoot中使用AOP和令牌桶算法實(shí)現(xiàn)網(wǎng)絡(luò)限速,通過自定義注解、面向切面編程和測試驗(yàn)證等步驟,需要的朋友可以參考下2026-04-04
SpringBoot使用MyBatis的XML文件進(jìn)行SQL語句編寫
在現(xiàn)代 Java Web 開發(fā)中,Spring Boot 和 MyBatis 是兩個(gè)非常流行的技術(shù)框架,本文將詳細(xì)介紹如何在 Spring Boot 項(xiàng)目中使用 MyBatis 的 XML 文件來編寫 SQL 語句,感興趣的可以了解下2025-07-07
java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法
這篇文章主要介紹了java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法,涉及java針對文件操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08

