1. 程式人生 > >JAVA:String和StringBuffer的區別

JAVA:String和StringBuffer的區別

簡單地說,就是一個變數和常量的關係。StringBuffer物件的內容可以修改;而String物件一旦產生後就不可以被修改,重新賦值其實是兩個物件。

StringBuffer的內部實現方式和String不同,StringBuffer在進行字串處理時,不生成新的物件,在記憶體使用上要優於String類。所以在實際使用時,如果經常需要對一個字串進行修改,例如插入、刪除等操作,使用StringBuffer要更加適合一些。

String:在String類中沒有用來改變已有字串中的某個字元的方法,由於不能改變一個Java字串中的某個單獨字元,所以在JDK文件中稱String類的物件是不可改變的。然而,不可改變的字串具有一個很大的優點:編譯器可以把字串設為共享的。

StringBuffer:StringBuffer類屬於一種輔助類,可預先分配指定長度的記憶體塊建立一個字串緩衝區。這樣使用StringBuffer類的append方法追加字元 比 String使用 + 操作符新增字元 到 一個已經存在的字串後面有效率得多。因為使用 + 操作符每一次將字元新增到一個字串中去時,字串物件都需要尋找一個新的記憶體空間來容納更大的字串,這無凝是一個非常消耗時間的操作。新增多個字元也就意味著要一次又一次的對字串重新分配記憶體。使用StringBuffer類就避免了這個問題。

StringBuffer是執行緒安全的,在多執行緒程式中也可以很方便的進行使用,但是程式的執行效率相對來說就要稍微慢一些。

StringBuffer的常用方法StringBuffer類中的方法要偏重於對字串的變化例如追加、插入和刪除等,這個也是StringBuffer和String類的主要區別。

1、append方法 public StringBuffer append(boolean b) 該方法的作用是追加內容到當前StringBuffer物件的末尾,類似於字串的連線。呼叫該方法以後,StringBuffer物件的內容也發生改變,例如:

StringBuffer sb = new StringBuffer(“abc”); sb.append(true); 則物件sb的值將變成”abctrue”。使用該方法進行字串的連線,將比String更加節約內容,例如應用於資料庫SQL語句的連線,例如: StringBuffer sb = new StringBuffer(); String user = “test”; String pwd = “123”; sb.append(“select * from userInfo where username=“).append(user).append(“ and pwd=”).append(pwd); 這樣物件sb的值就是字串“select * from userInfo where username=test and pwd=123”。

2、deleteCharAt方法 public StringBuffer deleteCharAt(int index) 該方法的作用是刪除指定位置的字元,然後將剩餘的內容形成新的字串。例如: StringBuffer sb = new StringBuffer(“Test”);sb. deleteCharAt(1); 該程式碼的作用刪除字串物件sb中索引值為1的字元,也就是刪除第二個字元,剩餘的內容組成一個新的字串。所以物件sb的值變為”Tst”。 還存在一個功能類似的delete方法: public StringBuffer delete(int start,int end)該方法的作用是刪除指定區間以內的所有字元,包含start,不包含end索引值的區間。例如: StringBuffer sb = new StringBuffer(“TestString”); sb. delete (1,4); 該程式碼的作用是刪除索引值1(包括)到索引值4(不包括)之間的所有字元,剩餘的字元形成新的字串。則物件sb的值是”TString”。

3、insert方法 public StringBuffer insert(int offset, String s) 該方法的作用是在StringBuffer物件中插入內容,然後形成新的字串。例如: StringBuffer sb = new StringBuffer(“TestString”); sb.insert(4,“false”); 該示例程式碼的作用是在物件sb的索引值4的位置插入字串false,形成新的字串,則執行以後物件sb的值是”TestfalseString”。

4、reverse方法 public StringBuffer reverse() 該方法的作用是將StringBuffer物件中的內容反轉,然後形成新的字串。例如: StringBuffer sb = new StringBuffer(“abc”);sb.reverse();經過反轉以後,物件sb中的內容將變為”cba”。

5、setCharAt方法 public void setCharAt(int index, char ch) 該方法的作用是修改物件中索引值為index位置的字元為新的字元ch。例如: StringBuffer sb = new StringBuffer(“abc”);sb.setCharAt(1,’D’);則物件sb的值將變成”aDc”。

6、trimToSize方法 public void trimToSize()該方法的作用是將StringBuffer物件的中儲存空間縮小到和字串長度一樣的長度,減少空間的浪費。

7、構造方法: StringBuffer s0=new StringBuffer(); 分配了長16位元組的字元緩衝區StringBuffer s1=new StringBuffer(512);分配了512位元組的字元緩衝區

8、獲取字串的長度: length()StringBuffer s = new StringBuffer(“www”); int i=s.length(); m.返回字串的一部分值substring(int start) //返回從start下標開始以後的字串substring(int start,int end) //返回從start到 end-1字串

9.替換字串 replace(int start,int end,String str) s.replace(0,1,“qqq”);10.轉換為不變字串:toString()。