StringBuffer與StringBuilder底層擴容機制與常用方法
StringBuffer 與 StringBuilder底層分析、擴容機制與常用方法
StringBuffer(線性安全)
- 直接父類AbstractStringBuilder
- 實現(xiàn)了Serializable,可以串行化
- 在父類AbstractStringBuilder有屬性char[] value 不是final類型,該value數(shù)字存放字符串內(nèi)容,引出存放在堆中,所以在變化的時候不用每次都更改地址,創(chuàng)建新的對象,效率高
- 是一個final類,不能被繼承
StringBuffer構(gòu)造方法
- 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的類繼承結(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修飾
- 主要操作時append和insert,可以重載這些方法,可以接受任何類型的數(shù)據(jù)
- 擴容機制與StringBuffer一樣
String、StringBuffer、StringBuilder三者之間的區(qū)別
- StringBuffer、StringBuilder 均代表可變字符串,方法一樣
- String:不可變字符序列,效率低,但是復(fù)用率高
- StringBuffer:可變字符串、增刪效率高,線性安全
- StringBuilder:可變字符串、增刪效率高,線性不安全
使用場景
1.如果字符串存在大量的修改操作,一般使用StringBuffer 或StringBuilder
2 . 如果字符串存在大量的修改操作,并在單線程的情況,使用 StringBuilder
3.如果字符串存在大量的修改操作,并在多線程的情況,使用 StringBuffer
4.如果我們字符串很少修改,被多個對象引用,使用String,比如配置信息等
到此這篇關(guān)于StringBuffer與StringBuilder底層擴容機制與常用方法的文章就介紹到這了,更多相關(guān)StringBuffer與StringBuilder擴容與用法內(nèi)容請搜索腳本之家以前的文章或繼續(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問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11SpringBoot+Security 發(fā)送短信驗證碼的實現(xiàn)
這篇文章主要介紹了SpringBoot+Security 發(fā)送短信驗證碼的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05基于Springboot商品進銷存管理系統(tǒng)的設(shè)計與實現(xiàn)
本項目基于springboot實現(xiàn)一個進銷存管理系統(tǒng),主要用戶開設(shè)網(wǎng)店的相關(guān)商品的進貨、銷售、庫存的管理,功能比較完整,需要的可以參考一下2022-08-08Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)
這篇文章主要介紹了Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11