第07章 常用類庫API_03_StringBuffer原始碼分析與常用方法
在實際開發當中,我們經常會使用到字串連線的操作,如果用String來操作,則使用“+”號完成字串的連線操作。
使用String連線字串,程式碼效能會非常低,應為String的內容不可改變,解決這個問題的方法是使用StringBuffer。
StringBuffer在進行字串處理時,不生成新的物件,在記憶體使用上要優於String類,所以在實際使用時,如果經常需要對一個字串進行修改,例如追加、插入、刪除等操作,使用StringBuffer要更加適合一些。對於StringBuffer物件的每次修改都會改變物件自身,這點是和String類最大的區別
先來兩個面試題:
1.String,StringBuffer,StringBuilder的區別:
a.StringBuffer和StringBuilder的區別:
StringBuffer是jdk1.0版本的,是執行緒安全的,效率低
StringBuilder是jdk1.5版本的,是執行緒不安全的,效率高
b.String和StringBuffer,StringBuilder的區別
String是不可變的字元序列
StringBuffer和StringBuilder是可變的字元序列
2.String和StringBuffer分別作為引數傳遞問題
我們知道基本資料型別是值傳遞,不會改變其值,引用資料型別是是址傳遞,會改變其值。
但是String類雖裡然是引用資料型別,當作引數傳遞時,不會改變其值,因為方法面對String值改變的操作,都是再建立以string物件,並且該物件隨著方法的結束而變成垃圾。
String物件的特點,一旦被初始化,就不能被改變
StringBuffer則與String不一樣,同其他引用資料型別一樣,做引數傳遞時,同樣傳入的是地址值,但是方法中發生改變返回的是本身,方法彈棧後,改變的值仍然有效。
StringBuffer的新增功能:
1.public StringBuffer append(String str):可以把任意資料型別新增到字串緩衝區裡面,並返回字串緩衝區本身
注意:StringBuffer是字串緩衝區,當new的時候是在堆記憶體建立了一個物件,底層是一個長度為16的字元陣列,當呼叫新增的方法時,不會再重新建立物件,而是不斷向原緩衝區新增字元
StringBuffer類中重寫了toString方法,顯示的是物件中的屬性值
2.public StringBuffer insert(int offsert, String str): 在指定位置把任意型別的資料插入到字串緩衝區裡面,並返回字元緩衝區本身
注意:如果沒有指定位置的索引就會報StringIndexOutOfBoundsException異常。
StringBuffer的刪除功能:
1.public StringBuffer deleteCharAt(int index) 刪除指定位置的字元,並返回字元緩衝區本身
注意:當緩衝區中這個索引上沒有元素的時候就會報StringIndexOutOfBoundsException異常
2.public StringBuffer delete(int start,int end) 刪除從指定位置開始到指定位置結束的內容,返回字元緩衝區本身
若清空緩衝區可寫為delete(0,sb.length())
StringBuffer的替換功能:
1.public StringBuffer replace(int start,int end,String str) 從start開始到end結束用str替換
2.StringBuffer的反轉功能 public StringBuffer reverse() 將字串反轉
StringBuffer的擷取功能:
1.pubic string subString(int start) 從指定位置開始擷取到末尾
2.public string subString(int start, int end) 擷取從指定位置開始到指定位置結束
注意:返回值的型別是String,不再是StringBuffer本身。返回的是一個新的字串,原StringBuffer本身不變。
StringBuffer與String的轉換:
1.String——> StringBuffer
a.通過構造方法
b.通過append方法
2.StringBuffer——>String
a.通過構造方法
b.通過toString方法
c.通過subString(0,str.length)
本文引用:
原文:https://blog.csdn.net/u011109931/article/details/50063019
原文:https://blog.csdn.net/Dustin_CDS/article/details/50809754