日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

StringBufferStringBuilder

發(fā)布時(shí)間:2024/1/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StringBufferStringBuilder 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、StringBuffer:

1. 是可變長(zhǎng)的,內(nèi)容可以直接增刪,是一個(gè)容器,存放字符數(shù)組的位置在父類AbstructStringBuilder的char[] value中,與String不同,該數(shù)組不是final的,是存放在堆中的,如果想要繼續(xù)添加字符,在不超過(guò)原本數(shù)組長(zhǎng)度的情況下,可以直接追加。

而String每次更改都要重新創(chuàng)建對(duì)象,更改string變量指向的地址值,因?yàn)槠渥址麛?shù)組保存的地址值是final不可更改的,所以每次只能重新創(chuàng)建string對(duì)象。

2. StringBuffer類是final的,不能被繼承。

3. 構(gòu)造器:

(1)new StringBuffer():默認(rèn)傳入16,16為value的默認(rèn)大小

(2)new StringBuffer(int capacity):給定value的大小

(3)new StringBuffer(String str):底層調(diào)用 super(str.length()+16); append(str);

(4)new StringBuffer(CharSequence seq):傳入字符序列,不常用

4. String和StringBuffer的互相轉(zhuǎn)換:

(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():里面可以傳字符、字符串、數(shù)字、布爾等,都可以轉(zhuǎn)為字符類型添加進(jìn)去

(2)toString():底層是

if (toStringCache == null) {//這里的toStringCache是被transient修飾的不能被序列化的私有屬性toStringCache = Arrays.copyOfRange(value, 0, count);//現(xiàn)將value復(fù)制 } return new String(toStringCache, true);//重新new一個(gè)string對(duì)象

(3)delete(start,end):刪除StringBuffer對(duì)象的 [start,end)的部分

(4)replace(start,end,str):將[start,end)部分替換為str

(5)indexOf(str):str在StringBuffer中的首次出現(xiàn)位置

(6)insert(index,str):在index位置插入str,原來(lái)該位置上的字符向后推移

(7)length()

6. 練習(xí):

?(1)底層調(diào)用父類的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的話,也會(huì)追加“null”

(2)會(huì)調(diào)用length(),因此會(huì)有空指針異常

public StringBuffer(String str) {super(str.length() + 16);append(str); }

(3)簡(jiǎn)單應(yīng)用insert:給小數(shù)點(diǎn)前面的數(shù)每三個(gè)一組加上“,”

public static void main(String[] args) {//給字符串加上逗號(hào)分隔其代表的數(shù)字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的區(qū)別是不是線程安全的,用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候,因?yàn)樗麤](méi)有synchronize互斥

2. 在單線程情況下比StringBuffer快,是其一個(gè)簡(jiǎn)易替換

3. 其父類和StringBuffer一致,都是AbstructStringBuilder。

三、效率上 StringBuilder > StringBuffer > String

四、小結(jié)

?

?

總結(jié)

以上是生活随笔為你收集整理的StringBufferStringBuilder的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。