1. 程式人生 > >第07章 常用類庫API_03_StringBuffer原始碼分析與常用方法

第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