String,StringBuilder,StringBuffer
阿新 • • 發佈:2022-05-31
概括
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)