1. 程式人生 > >Java String、StringBuilder和StringBuffer的區別

Java String、StringBuilder和StringBuffer的區別

String和StringBuffer主要有2個區別:

(1)String類物件為不可變物件,一旦你修改了String物件的值,隱性重新建立了一個新的物件,釋放原String物件,StringBuffer類物件為可修改物件,可以通過append()方法來修改值

(2)String類物件的效能遠不如StringBuffer類。

在java中有3個類來負責字元的操作。

  1. Character 是進行單個字元操作的,

  2. String 對一串字元進行操作。不可變類。

  3. StringBuffer 也是對一串字元進行操作,但是可變類。

String:
是物件不是原始型別.
為不可變物件,一旦被建立,就不能修改它的值.
對於已經存在的String物件的修改都是重新建立一個新的物件,然後把新的值儲存進去.
String 是final類,即不能被繼承.

StringBuffer:
是一個可變物件,當對他進行修改的時候不會像String那樣重新建立物件
它只能通過建構函式來建立,
StringBuffer sb = new StringBuffer();
注意:不能通過賦值符號對他進行賦值.
sb = "welcome to here!";//error
物件被建立以後,在記憶體中就會分配記憶體空間,並初始儲存一個null.向StringBuffer中賦值的時候可以通過它的append方法.
sb.append("hello");
字串連線操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");


str += "here";
的處理步驟實際上是通過建立一個StringBuffer,然後呼叫append(),最後
再將toSting(), 這樣String的連線操作就比StringBuffer多出了一些附加操作,當然效率上要打折扣。並且由於String 物件是不可變物件,每次操作Sting 都會重新建立新的物件來儲存新的值, 這樣原來的物件就沒用了,就要被垃圾回收.這也是要影響效能的。

StringBuilder:
StringBuilder類不是執行緒安全的,但其在單執行緒中的效能比StringBuffer高。

執行速度方面的比較:StringBuilder > StringBuffer > String

對於三者使用的總結:

  1. 如果要操作少量的資料用 = String
  2. 單執行緒操作字串緩衝區 下操作大量資料 = StringBuilder
  3. 多執行緒操作字串緩衝區 下操作大量資料 = StringBuffer