1. 程式人生 > >String、StringBuffer、StringBuilder的關係與區別

String、StringBuffer、StringBuilder的關係與區別

String:

String物件一旦建立就不能改變,如果通過"+"做連線,是從新開闢了空間來存新的字串,並把新字串的引用賦值給了變數,如果需要進行大量的字串修改操作,應該使用StringBuffer/StringBuilder/字元陣列,最終結果都可以轉換成String物件。

StringBuffer:

執行緒安全(同一時刻只能被一個執行緒操作)的可變字元系列,類似String的字串緩衝區,通過某些方法呼叫可以改變該序列的長度和內容。

每個字串緩衝區都有一定容量,內部緩衝區溢位時,此容量自動增大。

StringBuilder:

JDK5開始,為StringBuffer補充了一個單執行緒使用的等價類,即StringBuilder。

與StingBuffer相比,通常應該優先使用StringBuilder,它不執行同步,所以速度更快。

常用函式:

1、public int length() 字串的實際個數

2、public int capacity() 容量

3、public StringBuffer append(String str) 追加

4、public StringBuffer insert(int offset,String str) 

5、public int indexOf(String str)查詢指定str的位置

6、public int indexOf(String str,int fromIndex)從fromIndex處開始查詢指定str的位置

7、public int lastIndexOf(String str)最後一次出現

8、public StringBuffer reverse() 反轉字串

9、public String toString()

String、StringBuffer、StringBuilder的區別

1、String是不可變字串,StringBuffer、StringBuilder是可變字串

2、StringBuffer是執行緒安全的,StringBuilder是執行緒不安全的

3、String可以直接使用等號賦值,而StringBuffer、StringBuilder必須採用標準例項化法才行

4、String可以使用加號聯結字串,而StringBuffer、StringBuilder需要使用append()

5、執行速度上:StringBuilder > StringBuffer > String

 

Tips:

1、怎麼理解String是不可變字串?

對String進行操作不是在原有String物件上進行操作,而是重新建立了字串;

例如 String s="java"; s="hello";是建立了一個新的物件"hello",並把"hello"的引用賦值給了變數s。

2、三者之間的轉換關係

String------->StringBuffer/StringBuilder   通過new標準的例項化法

StringBuffer/StringBuilder ------->String   通過呼叫toString()函式