StringBuffer和String效率比較

2021-07-30 19:35:49 字數 2785 閱讀 9534

最近,在寫後台sql語句的時候用到了stringbuffer類,出於對這幾者之間區別的好奇,學習了一下網上各大部落格的見解,仔細了解了string、stringbuffer、stringbuilder之前的用法、區別以及效 率

string:字串常量

stringbuffer:字串變數  (執行緒安全)

stringbuilder:字串變數 (非執行緒安全)

cpu上,寫個1000次的拼接程式,就會很明顯了   

下面看乙個小例子:

public class stringbuffertest

endtime = system.currenttimemillis();

system.out.println("使用string的時間是:" + (endtime - starttime) + "毫秒!");

starttime = system.currenttimemillis();

for (int i = 0; i < 9999; i++)

endtime = system.currenttimemillis();

system.out.println("使用stringbuffer的時間是:" + (endtime - starttime) + "毫秒!");

}}

執行結果:stringbuffer 效率高於string

對於三者使用的總結: 1.如果要操作少量的資料用 = string

2.單執行緒操作字串緩衝區 下操作大量資料 = stringbuilder

3.多執行緒操作字串緩衝區 下操作大量資料 = stringbuffer

借鑑以為博主的文章理解:

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()。

String和StringBuffer的區別?

對於這個問題,網路上已經有較多的解答,大多數都是說string 和stringbuffer 它們可以儲存和操作字串,即包含多個字元的字元資料。這個 string 類提供了數值不可改變的字串。而這個 stringbuffer 類提供的字串可以進行修改。當你知道字元資料要改變的時候你就可以使用 stri...

String和StringBuffer的區別

string和stringbuffer的區別 2008 04 10 11 08 string與stringbuffer的區別 稍微延伸說來 public class else 列印的結果是 乙個記憶體空間。這裡 的意義是兩個運算元是否指向同乙個物件。可見s2在不用new建立的情況下會自動檢索到具有相...

String和StringBuffer學習總結

一 string x abc 和string y new string abc 區別 string x abc 變數x指向的是常量池的字串常量物件。x asd 表示x指向 asd 字串常量的位址,而不是把 abc 修改為 asd string y new string abc 變數y指向的是堆中的字...