StringBufferStringBuilder
一、StringBuffer:
1. 是可變長的,內容可以直接增刪,是一個容器,存放字符數組的位置在父類AbstructStringBuilder的char[] value中,與String不同,該數組不是final的,是存放在堆中的,如果想要繼續添加字符,在不超過原本數組長度的情況下,可以直接追加。
而String每次更改都要重新創建對象,更改string變量指向的地址值,因為其字符數組保存的地址值是final不可更改的,所以每次只能重新創建string對象。
2. StringBuffer類是final的,不能被繼承。
3. 構造器:
(1)new StringBuffer():默認傳入16,16為value的默認大小
(2)new StringBuffer(int capacity):給定value的大小
(3)new StringBuffer(String str):底層調用 super(str.length()+16); append(str);
(4)new StringBuffer(CharSequence seq):傳入字符序列,不常用
4. String和StringBuffer的互相轉換:
(1)String——>StringBuffer:
(1.1)new StringBuffer(String str)
(1.2)StringBuffer sb = new StringBuffer(); sb.append(str);
(2)StringBuffer——>String:
(2.1)new String(stringbuffer);
(2.2)stringbuffer.toString();
5. 常用方法:
(1)append():里面可以傳字符、字符串、數字、布爾等,都可以轉為字符類型添加進去
(2)toString():底層是
if (toStringCache == null) {//這里的toStringCache是被transient修飾的不能被序列化的私有屬性toStringCache = Arrays.copyOfRange(value, 0, count);//現將value復制 } return new String(toStringCache, true);//重新new一個string對象(3)delete(start,end):刪除StringBuffer對象的 [start,end)的部分
(4)replace(start,end,str):將[start,end)部分替換為str
(5)indexOf(str):str在StringBuffer中的首次出現位置
(6)insert(index,str):在index位置插入str,原來該位置上的字符向后推移
(7)length()
6. 練習:
?(1)底層調用父類的append方法
if (str == null)return appendNull();其中
private AbstractStringBuilder appendNull() {int c = count;ensureCapacityInternal(c + 4);final char[] value = this.value;value[c++] = 'n';value[c++] = 'u';value[c++] = 'l';value[c++] = 'l';count = c;return this; }可以看出,添加的字符串是null的話,也會追加“null”
(2)會調用length(),因此會有空指針異常
public StringBuffer(String str) {super(str.length() + 16);append(str); }(3)簡單應用insert:給小數點前面的數每三個一組加上“,”
public static void main(String[] args) {//給字符串加上逗號分隔其代表的數字String s = "31231.23";StringBuffer sb = new StringBuffer(s);for(int i = sb.lastIndexOf(".")-3;i>0;i-=3){//先往前挪三位再判斷sb.insert(i,",");}sb.length();String str = null;sb.append(str);System.out.println(sb.toString());}1. 兩者的父類都是AbstructStringBuilder,二者的方法都是相同的,只是線程安全性不同。
二、StringBuilder:
1. 其與StringBuffer的區別是不是線程安全的,用在字符串緩沖區被單個線程使用的時候,因為他沒有synchronize互斥
2. 在單線程情況下比StringBuffer快,是其一個簡易替換
3. 其父類和StringBuffer一致,都是AbstructStringBuilder。
三、效率上 StringBuilder > StringBuffer > String
四、小結
?
?
總結
以上是生活随笔為你收集整理的StringBufferStringBuilder的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去大厂前端面试流程,从笔试到CTO再到H
- 下一篇: 移动端利用原生h5拨打电话