1. 程式人生 > 其它 >String,StringBuilder,StringBuffer

String,StringBuilder,StringBuffer

概括

String:不可變的字元序列,底層使用char[]儲存

StringBuffer:可變的字元序列,執行緒安全的,效率低,char[]儲存

StringBuilder:可變的字元序列,jdk5.0新增,執行緒不安全,效率高,char[]儲存

原始碼分析

String str = new String();              // char[] value = new char[0]
String str = new String("abc");         // char[] value = new char[0]{'a','b','c'}
StringBuffer sb = new StringBuffer();   //
char[] value = new char[16]; sb.append("a"); //char[0]='a'; StringBuffer sb = new StringBuffer("abc"); //char[] value = new char["abc".length()+16];

StringBuilder和StringBuffer基本一樣

擴容

如果新增的資料底層陣列不夠存,需要擴容,預設擴容到  原陣列長度2倍+2,同時將原陣列中的元素copy到新陣列中

//需要擴容的時候,關鍵原始碼
int newCapacity = (value.length << 1) + 2;

編碼建議

使用時預估字元長度,使用new StringBuilder(int capacity),new StringBuffer(int capacity)

StringBuffer執行緒安全

保證執行緒安全是通過方法使用synchronized關鍵字來實現的

StringBuffer,StringBuilder的常用方法

  增:append(xxxx):字串拼接

  刪:delete(int start,int end):刪除指定位置的內容

  改:replace(int start,int end,String str)  :把[start,end)位置的字串替換為str    |    void setCharAt(int n,char ch)

  查:char charAt() 

  長度:int length()

  插入:insert(int offset,xxx) 在指定位置插入xxx

  遍歷:for()+charAt()  / toString()

  其他:

     reverse():字元序列逆轉

     int indexOf(String str)

     String subString(int start,int end)