java中StringBuffer的length()和capacity()方法對比
StringBuffer的length()和capacity()
StringBuffer類和String類差不多,都是字符串類,只是StringBuffer在對字符串進行修改時不會生成新的對象,所以效率相對較高,占用空間也小。
length()方法和capacity()方法都是獲取StringBuffer的長度。
length()返回字符串的實際長度;
capacity()返回字符串所占容器的總大小。
舉例:
可以看到:
1.StringBuffer的的初始大小為(16+初始字符串長度)即capacity=16+初始字符串長度;
2.一旦length大于capacity時,capacity便在前一次的基礎(chǔ)上加1后倍增;
例如:
length=1;capacity=17;//初始長度 length=5;capacity=17;// length=17;capacity=17;// length=18;capacity=(capacity+1)*2=36;//第一次倍增 ............ length=37;capacity=(capacity+1)*2=74;//第二次倍增 ............
但有如下特殊情況:
StringBuffer sb3=new StringBuffer("a"); System.out.println("length="+sb3.length());//length=1 System.out.println("capacity="+sb3.capacity());//capacity=17; System.out.println("--------------------"); sb3.append("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); System.out.println("length="+sb3.length());//length=20; System.out.println("capacity="+sb3.capacity());//capacity=40;
當(dāng)length>capacity時,capacity倍增仍達不到length的長度,這種現(xiàn)象稱為跨階,此時,capacity將根據(jù)length的實際大小設(shè)置長度,此后將按照直接倍增的方式增長(不將length+1)
StringBuffer類初始容量及擴容
StringBuffer類可以創(chuàng)建可修改的字符串序列
該類有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三個改造方法。
1.StringBuffer()的初始容量可以容納16個字符,當(dāng)該對象的實體存放的字符的長度大于16時,實體容量就自動增加。StringBuffer對象可以通過length()方法獲取實體中存放的字符序列長度,通過capacity()方法來獲取當(dāng)前實體的實際容量。
2.StringBuffer(int size)可以指定分配給該對象的實體的初始容量參數(shù)為參數(shù)size指定的字符個數(shù)。當(dāng)該對象的實體存放的字符序列的長度大于size個字符時,實體的容量就自動的增加。以便存放所增加的字符。
3.StringBuffer(String s)可以指定給對象的實體的初始容量為參數(shù)字符串s的長度額外再加16個字符。當(dāng)該對象的實體存放的字符序列長度大于size個字符時,實體的容量自動的增加,以便存放所增加的字符。
接下來介紹StringBuffer()怎樣擴容:
首先我們需要知道StringBuffer和StringBuilder類都繼承了抽象類AbstractStringBuilder類;
源碼都調(diào)用父類來進行初始化:
StringBuffer(String s)的初始化:
擴容算法:
使用append()方法在字符串后面追加?xùn)|西的時候,如果長度超過了該字符串存儲空間大小了就需要進行擴容:構(gòu)建新的存儲空間更大的字符串,將久的復(fù)制過去;
再進行字符串a(chǎn)ppend添加的時候,會先計算添加后字符串大小,傳入一個方法:ensureCapacityInternal 這個方法進行是否擴容的判斷,需要擴容就調(diào)用expandCapacity方法進行擴容:
嘗試將新容量擴為大小變成2倍+2 if 判斷一下 容量如果不夠,直接擴充到需要的容量大小。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- java中String StringBuffer和StringBuilder的區(qū)別詳解
- java中String、StringBuffer與StringBuilder的區(qū)別
- JAVA基礎(chǔ)類庫之String類,StringBuffer類和StringBuilder類
- Java基礎(chǔ)之StringBuffer詳解
- Java利用StringBuffer替換特殊字符的方法實現(xiàn)
- java中stringbuffer線程安全分析實例詳解
- Java常用類庫StringBuffer,Runtime,日期操作類等類庫總結(jié)
- java String、StringBuilder和StringBuffer的區(qū)別詳解
- Java 基礎(chǔ)全面講解StringBuffer類的使用
相關(guān)文章
java調(diào)用webservice接口,并解析返回參數(shù)問題
這篇文章主要介紹了java調(diào)用webservice接口,并解析返回參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07利用Kotlin + Spring Boot實現(xiàn)后端開發(fā)
這篇文章主要給大家介紹了關(guān)于利用Kotlin + Spring Boot實現(xiàn)后端開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Java獲取HttpServletRequest的三種方法詳解
這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest2023-11-11
HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下解決在啟動eclipse的tomcat進行訪問時出現(xiàn)404問題的方法
這篇文章主要介紹了解決在啟動eclipse的tomcat進行訪問時出現(xiàn)404問題的方法,感興趣的小伙伴們可以參考一下2016-04-04IDEA新建springboot項目時未生成pom.xml文件的解決操作
這篇文章主要給大家介紹了關(guān)于IDEA新建springboot項目時未生成pom.xml文件的解決操作方法,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-02-02