String、StringBuffer和StringBuilder類的
Java提供了String、StringBuffer和StringBuilder類來封裝字串,並提供了一系列操作字串物件的方法。
它們的相同點是都用來封裝字串;都實現了CharSequence介面。它們之間的區別如下:
一、可變與不可變
String類是一個不可變類,即建立String物件後,該物件中的字串是不可改變的,直到這個物件被銷燬。StringBuffer與StringBuilder都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字元陣列儲存字串,是可變類。
由於String是可變類,適合在需要被共享的場合中使用,當一個字串經常被修改時,最好使用StringBuffer實現。如果用String儲存一個經常被修改的字串,該字串每次修改時都會建立新的無用的物件,這些無用的物件會被垃圾回收器回收,會影響程式的效能,不建議這麼做。
二、初始化方式
當建立String物件時,可以利用構造方法String str = new String("Java")的方式來對其進行初始化,也可以直接用賦值的方式String s = "Java"來初始化。而StringBuffer只能使用構造方法StringBuffer sb = new StringBuffer("hello")的方式初始化。
三、字串修改方式
String字串修改方法是首先建立一個StringBuffer,其次呼叫StringBuffer的append方法,最後呼叫StringBuffer的toString()方法把結果返回,示例程式碼如下:
String str = "hello";
str += "java";
以上程式碼等價於下面的程式碼:
StringBuffer sb = new StringBuffer(str);
sb.append("java");
str = sb.toString();
上述String字串的修改過程要比StringBuffer多一些額外操作,會增加一些臨時的物件,從而導致程式的執行效率降低。StringBuffer和StringBuilder在修改字串方面比String的效能要高。
四、是否實現了equals和hashCode方法
String實現了equals()方法和hashCode()方法,new String("java").equals(new String("java"))的結果為true;
而StringBuffer沒有實現equals()方法和hashCode()方法,因此,new StringBuffer("java").equals(new StringBuffer("java"))的結果為false,將StringBuffer物件儲存進Java集合類中會出現問題。
五、是否執行緒安全
StringBuffer與StringBuilder都提供了一系列插入、追加、改變字串裡的字元序列的方法,它們的用法基本相同,只是StringBuilder是執行緒不安全的,StringBuffer是執行緒安全的,。如果只是在單執行緒中使用字串緩衝區,則StringBuilder的效率會高些,但是當多執行緒訪問時,最好使用StringBuffer。
綜上,在執行效率方面,StringBuilder最高,StringBuffer次之,String最低,對於這種情況,一般而言,如果要操作的數量比較小,應優先使用String類;如果是在單執行緒下操作大量資料,應優先使用StringBuilder類;如果是在多執行緒下操作大量資料,應優先使用StringBuilder類。
作者:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2480/viewspace-2821843/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- String、StringBuilder和StringBufferUI
- 【Java】String、StringBuilder和StringBufferJavaUI
- java String,StringBuilder和StringBufferJavaUI
- [Java]String、StringBuilder和StringBufferJavaUI
- StringBuffer 和 StringBuilder 類UI
- String和StringBuilder和StringBuffer三兄弟UI
- C# string、stringBuffer和stringBuilderC#UI
- Java StringBuffer 和 StringBuilder 類JavaUI
- String、StringBuffer、StringBuilder的理解UI
- String、StringBuffer、StringBuilder剖析UI
- String,StringBuilder,StringBuffer的區別UI
- String、StringBuilder、StringBuffer的區別UI
- String、StringBuffer、StringBuilder的區別UI
- Java String StringBuilder 和 StringBuffer 用法詳解JavaUI
- String、StringBuffer、StringBuilder區別?UI
- String,StringBuffer,StringBuilder區別UI
- 從為什麼String=String談到StringBuilder和StringBufferUI
- String,StringBuffer與StringBuilder的區別UI
- String、StringBuffer、與StringBuilder的區別UI
- String,StringBuffer與StringBuilder的區別??UI
- Java中String,StringBuffer和StringBuilder的區別(轉載)JavaUI
- 老生常談 String、StringBuilder、StringBufferUI
- Java字串(String_StringBuilder_StringBuffer)Java字串UI
- 正確使用String,StringBuffer,StringBuilderUI
- StringBuffer和StringBuilderUI
- java複習之 String,StringBuffer,StringBuilderJavaUI
- StringBuilder、StringBuffer和String三者的聯絡和區別(轉)UI
- 面試必知:String、StringBuilder、StringBuffer的區別面試UI
- String, StringBuilder, StringBuffer 之間的區別 - JavaUIJava
- String StringBuffer StringBuilder 三者的區別UI
- 第二十節:詳細講解String和StringBuffer和StringBuilder的使用UI
- Android- String、StringBuffer、StringBuilder區別AndroidUI
- Java中String/StringBuffer/StringBuilder區別(轉)JavaUI
- String、StringBuffer與StringBuilder之間區別UI
- 你必須搞清楚的String,StringBuilder,StringBufferUI
- 從原始碼看String,StringBuffer,StringBuilder的區別原始碼UI
- StringBuilder StringBuffer String的區別(原始碼分析)-javaUI原始碼Java
- StringBuffer和StringBuilder的區別UI