String、StringBuffer、StringBuilder三者的區別

1:三者在執行速度方面的比較:StringBuilder >  StringBuffer  >  String

2:String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符串變量

    StringBuilder:字符串變量

  從上面的名字可以看到,String是“字符串常量”,也就是不可改變的對象。對於這句話的理解你可能會產生這樣一個疑問  ,比如這段代碼:

String s = "abcd";
s = s+1;
System.out.print(s);

    我們明明就是改變了String型的變量s的,爲什麼說是沒有改變呢? 其實這是一種欺騙,JVM是這樣解析這段代碼的:首先創建對象s,賦予一個abcd,然後再創建一個新的對象s用來執行第二行代碼,也就是說我們之前對象s並沒有變化,所以我們說String類型是不可改變的對象了,由於這種機制,每當用String操作字符串時,實際上是在不斷的創建新的對象,而原來的對象就會變爲垃圾被GC(垃圾回收器)回收掉,可想而知這樣執行效率會有多低。

  而StringBuffer與StringBuilder就不一樣了,他們是字符串變量,是可改變的對象,每當我們用它們對字符串做操作時,實際上是在一個對象上操作的,這樣就不會像String一樣創建一些而外的對象進行操作了,當然速度就快了。

       StringBuffer是線程安全的可變字符序列。一個類似於 String 的字符串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。

       StringBuilder一個可變的字符序列。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因爲在大多數實現中,它比StringBuffer 要快。

              Java 語言提供對字符串串聯符號("+")以及將其他對象轉換爲字符串的特殊支持。字符串串聯是通過StringBuilder(或StringBuffer)類及其append 方法實現的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章