Android- String、StringBuffer、StringBuilder區別

Merbng發表於2018-05-18
  • String :字串常量(執行緒安全)

字串是不變的,他們的值在創造後就不能改變。 字串緩衝區支援可變字串。因為字串物件是不可變的,所以他們可以共享。

總結歸納了String的兩個最重要的特點:

  1. String是值不可變的常量,是執行緒安全的
  2. String類使用了final修飾符,String類是不可繼承的。
  • StringBuilder:字串變數(非執行緒安全)

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

是一個容器,最終會通過toString方法變成字串。

String與StringBuffer區別

  • 主要區別:在修改時物件自身是否可變
  1. String在修改時不會改變物件自身。每次對String型別進行改變的時候其實都等同於生成了一個新的String物件,然後將指標指向了新的String物件,所以經常改變內容的字串最好不要用String。

  2. StringBuffer在修改時會改變物件自身。每次結果都會對StringBuffer物件本身進行操作,而不是生成新的物件,改改變物件引用,所以一般情況下我們推薦使用StringBuffer,特別是字串物件經常改變的情況下,StringBuffer的主要操作是append和insert方法

  • StringBuffer物件和String物件之間的互轉:
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s);   //String轉換為StringBuffer
String s1 = sb1.toString();              //StringBuffer轉換為String
複製程式碼

總結

  • 如果要操作少量的資料用String
  • (多執行緒下)經常需要對一個字串進行修改,例如追加、插入和刪除等操作,使用StringBuffer更加適合一些。

StringBuffer與StringBuilder區別

  • StringBuilder是可變的物件,是5.0新增的 此類提供一個與StringBuffer相容的API,但不保證同步,該類被設計用作StringBuffer的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)
  • 執行緒安全性:
  1. StringBuffer執行緒安全的
  2. StringBuilder執行緒非安全
  • String、StringBuilder、StringBuffer速度區別
  1. 大多數情況下:StringBuffer > String 由於String物件不可變,重複新建物件,StringBuffer物件可變。
  2. StringBuilder > StringBuffer 當我們在字串緩衝區被多個執行緒使用時,JVM不能保證StringBuilder的操作是安全的,雖然他速度快,但是可以保證StringBuffer是可以正確操作的,當然大多數情況下就是我們是在單執行緒下進行的操作,使用大多數情況下建議用StringBuilder而不是用StringBuffer。
  • 特殊情況, String > StringBuffer
//String效率是遠要比StringBuffer快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“simple”).append(“ test”);
複製程式碼
//String速度是非常慢的:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
複製程式碼

總結

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

相關文章