1. 程式人生 > >String 與 StingBuffer的區別

String 與 StingBuffer的區別

StringBuffer是可變的而String是不可變的.
而且String用得多個的話會佔用不同的記憶體.
如:String str = "bb";
str = "aa";
前一個bb的記憶體地址不變,當又給它賦值為aa時它又指向aa的地址.

String   s   ;
每次對s進行賦值操作是都將生成一個新的String例項;
StingBuffer   sb;
sb則不然,它始終是同一個例項
所以在經常動態的改變字串的值是用StingBuffer效率比較高,java生成一個例項的代價較大。

String專門定義不變字串,而StingBuffer用來定義可變字串。
兩者在效能上椰油很大的區別:
String比較適合短的字串,StingBuffer適合動態增加的字串。
在實際使用過程中,要求:String+String這種在BS開發結構中不被提倡,對效能影響比較大。而StingBuffer則是比較推薦使用方法。

另外兩者的效能差別原因在於:“String是不變的物件,對它進行修改(+操作)的本質為:new 一個 StringBuilder物件,然後呼叫StringBuilder類的append方法,最後呼叫toString方法,並銷燬這個StringBuilder物件”

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

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

字串連線操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here