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)建新的對(duì)象,效率高
- 是一個(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() 注意有括號(hào)
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è)對(duì)象引用,使用String,比如配置信息等
到此這篇關(guān)于StringBuffer與StringBuilder底層擴(kuò)容機(jī)制與常用方法的文章就介紹到這了,更多相關(guān)StringBuffer與StringBuilder擴(kuò)容與用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決
這篇文章主要介紹了IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11jenkins按模塊進(jìn)行構(gòu)建遇到的問題及解決方案
這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05SpringBoot+Security 發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot+Security 發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05基于Springboot商品進(jìn)銷存管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本項(xiàng)目基于springboot實(shí)現(xiàn)一個(gè)進(jìn)銷存管理系統(tǒng),主要用戶開設(shè)網(wǎng)店的相關(guān)商品的進(jìn)貨、銷售、庫存的管理,功能比較完整,需要的可以參考一下2022-08-08Tomcat報(bào)錯(cuò):HTTP Status 500 (Wrapper cannot find servlet class)
這篇文章主要介紹了Tomcat報(bào)錯(cuò):HTTP Status 500 (Wrapper cannot find servlet class)解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11Feign如何設(shè)置超時(shí)時(shí)間(不同情況)
本文主要介紹了Feign的超時(shí)時(shí)間設(shè)置,包括單獨(dú)使用Feign和在SpringCloud環(huán)境下的設(shè)置方式,以及與Ribbon和Hystrix的配合使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11