- String :字串常量(執行緒安全)
字串是不變的,他們的值在創造後就不能改變。 字串緩衝區支援可變字串。因為字串物件是不可變的,所以他們可以共享。
總結歸納了String的兩個最重要的特點:
- String是值不可變的常量,是執行緒安全的
- String類使用了final修飾符,String類是不可繼承的。
-
StringBuilder:字串變數(非執行緒安全)
-
StringBuffer:字串變數(執行緒安全)
是一個容器,最終會通過toString方法變成字串。
String與StringBuffer區別
- 主要區別:在修改時物件自身是否可變
-
String在修改時不會改變物件自身。每次對String型別進行改變的時候其實都等同於生成了一個新的String物件,然後將指標指向了新的String物件,所以經常改變內容的字串最好不要用String。
-
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的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)
- 執行緒安全性:
- StringBuffer執行緒安全的
- StringBuilder執行緒非安全
- String、StringBuilder、StringBuffer速度區別
- 大多數情況下:StringBuffer > String 由於String物件不可變,重複新建物件,StringBuffer物件可變。
- 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;
複製程式碼
總結
- 如果要操作少量的資料用String
- 多執行緒操作字串緩衝區下操作大量資料用StringBuffer;
- 單執行緒操作字串緩衝區下操作大量資料用StringBuilder;