java基礎知識2--String,StringBufffer,StringBuilder的區別

String,StringBufffer,StringBuilder的區別數組

1.可變不可變方面安全

 String類中使用字符數組保存字符串  ,final 修飾固然是不可變的,用String來操做字符串的時候,一旦咱們字符串的值改變,就會在內存建立多一個空間來保存新的字符串,即當用String操做字符串時,其實是在不斷的建立新的對象,而原來的對象就會變爲垃圾被GC回收掉,一旦遇到複雜的操做,String很是低效多線程

private final char value[];

StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數組保存字符串,以下就是,可知這兩種對象都是可變的。每當咱們用它們對字符串作操做時,其實是在一個對象上操做的。因此,通常涉及到字符串操做的,咱們通常使用StringBuffer或者StringBuilder   app

char[] value;

2.線程安全方面:ui

String不可變,固然是安全的this

  AbstractStringBuilder(抽象類)是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操做,如expandCapacity、append、insert、indexOf等公共方法。抽象類與接口的其中一個區別是:抽象類中能夠定義一些子類的公共方法,子類只須要增長新的功能,不須要重複寫已經存在的方法;而接口中只是對方法的申明和常量的定義。spa

StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。線程

StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,因此是線程安全的,經常使用於多線程安全。由於StringBuffer要維持同步鎖,這確定要消耗部分資源,執行比StringBuilder慢。code

public synchronized StringBuffer reverse() {
    super.reverse();
    return this;
}

public int indexOf(String str) {
    return indexOf(str, 0);        //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}

StringBuilder並無對方法進行加同步鎖,因此是非線程安全的。可是若是是單線程,舊能夠直接用StringBuilder。對象

3.使用場景(效率:StringBuilder>StringBuffer>String)

  • 若是要操做少許的數據用 = String
  • 單線程操做字符串緩衝區 下操做大量數據 = StringBuilder
  • 多線程操做字符串緩衝區 下操做大量數據 = StringBuffer

4.下面是StringBuilder 經常使用的方法

StringBuilder append(參數)--將追加內容到當前StringBuilder對象的末尾;

StringBuilder insert(位置,參數)--將內容插入到StringBuilder對象的指定位置; str.insert(4, "!");  //在第5個位置插入 !

StringBuilder delete(初始位置,結束位置) --刪除偏移的字符串

String toString()--將SringBuilder 對象轉換爲String對象;

int length()--獲取字符串的長度;

 

就醬紫。

相關文章
相關標籤/搜索