1. 程式人生 > >Java中StringBuffer和StringBuilder類

Java中StringBuffer和StringBuilder類

一、StringBuffer類

執行緒安全的可變字串,相比於String可以節省空間 執行緒安全: 安全——同步——資料是安全的 不安全——不同步——效率高一些 安全和效率的問題

1、 構造方法

a) public StringBuffer(); 無參構造方法,初始化容量為16 b) public StringBuffer(int capacity) 指定容量的字串緩衝區物件 c) public StringBuffer(String str) 指定字串內容的字串緩衝區物件,容量為字串的長度+16

2、 新增功能

a) public StringBuffer append(String str)可以把任意型別新增到字元緩衝區 ,並返回字串緩衝區本身(在緩衝區後面新增)   i. StringBuffer sb1=new StringBuffer()   ii. StringBuffer sb2=sb1.append(hello)   iii. 這時候sb1和sb2裡面都是hello因為是先在s1字元緩衝區中新增hello之後將字   符串緩衝區本身返回給s2 b) public StringBuffer insert(int offset,String str)將任意型別的資料插入到字串緩衝區的指定位置,並返回字串本身。其餘字串後延。

3、 刪除功能

a) public StringBuffer deleteCharAt(int index)刪除指定位置的字元、並返回本身 b) public StringBuffer delete(int start,int end)刪除指定位置的字串,並返回本身。    刪除的字串包含start,不包含end

4、 替換功能

a) public StringBuffer replace (int stat ,int end ,String str)不包含end

5、 反轉功能

a) public StringBuffer reverse()

6、 擷取功能注意返回值型別為String,StringBuffer的資料並不改變

a) public String substring(int start)   i. 返回值為String類,且不改變原StringBuffrer中的資料   ii. StringBuffer sb= new StringBuffer()   iii. sb.append(HelloWorld);   iv. String s=sb,substring(5)   v. 這時候輸出s為World,sb為HelloWorld,並不會因為擷取而改變。   (與上面的功能不同) b) public String substring(int start,int end)包含start不包含end

7、 String和StringBuffer中的轉換(為了用StringBuffer的方法,轉過來還需要轉回去)

String轉換為StringBuffer  a) 方式1通過構造方法轉換   i. String s=”hello”   ii. StringBuffer sb=new StringBuffer(s)  b) 通過append()方法   i. StringBuffer sb2=new StringBuffer();   ii. sb2.append(s) StringBuffer轉換為String  a) 方式1通過構造方法轉換   StringBuffer buffer=new StringBuffer(“java”)   String s=new String(buffer)  b) 通過toString()方法   String str2=buffer.toString();

8、 String 、StringBuffer、StringBuilder 的區別

a) String是內容不可變的,而StringBuffer、StringBuilder都是內容可以變得 b) StringBuffer是同步的,資料安全,效率低,StringBuilder是不同步的,資料不安全,效率高。

9、 StringBuffer和陣列的區別

StringBuffer可以裝任何型別的資料,但是最終都會轉換為字串資料,而陣列確定了資料型別之後就只能裝此種類型的資料。

10、形式引數的問題

基本型別:形式引數的改變不影響實際引數 引用型別:引用型別的改變直接影響實際引數

String作為引數傳遞效果是和基本型別作為引數傳遞效果一樣的。 StingBuffer作為引數傳遞時,在方法中直接賦值不改變實際結果,如果是呼叫方法賦值結果會發生變化。(String和StringBuffer作為形式引數傳遞的例項在https://blog.csdn.net/zfliu96/article/details/83240022)

二、StringBuilder類

  一個可變的字元序列。此類提供一個與StringBuffer相容的API,但不保證同步。該類設計被用作StringBuffer的簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。如果可能建議優先採用該類,因為在大多數實現中,他比StringBuffer快。   方法和StringBuffer的方法一樣,只不過StringBuffer用StringBuilder來代替。