亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

深入解析Java編程中的StringBuffer與StringBuider

2019-11-26 14:58:24
字體:
來源:轉載
供稿:網友

String 的值是不可變的,每次對String的操作都會生成新的String對象,不僅效率低,而且耗費大量內存空間。

StringBuffer類和String類一樣,也用來表示字符串,但是StringBuffer的內部實現方式和String不同,在進行字符串處理時,不生成新的對象,在內存使用上要優于String。

StringBuffer 默認分配16字節長度的緩沖區,當字符串超過該大小時,會自動增加緩沖區長度,而不是生成新的對象。

StringBuffer不像String,只能通過 new 來創建對象,不支持簡寫方式,例如:

StringBuffer str1 = new StringBuffer(); // 分配16個字節長度的緩沖區StringBuffer str2 = =new StringBuffer(512); // 分配512個字節長度的緩沖區// 在緩沖區中存放了字符串,并在后面預留了16個字節長度的空緩沖區StringBuffer str3 = new StringBuffer(www.weixueyuan.net);


StringBuffer類的主要方法

StringBuffer類中的方法主要偏重于對于字符串的操作,例如追加、插入和刪除等,這個也是StringBuffer類和String類的主要區別。實際開發中,如果需要對一個字符串進行頻繁的修改,建議使用 StringBuffer。
1) append() 方法

append() 方法用于向當前字符串的末尾追加內容,類似于字符串的連接。調用該方法以后,StringBuffer對象的內容也發生改變,例如:

StringBuffer str = new StringBuffer(“biancheng100”);str.append(true);


則對象str的值將變成”biancheng100true”。注意是str指向的內容變了,不是str的指向變了。

字符串的”+“操作實際上也是先創建一個StringBuffer對象,然后調用append()方法將字符串片段拼接起來,最后調用toString()方法轉換為字符串。

這樣看來,String的連接操作就比StringBuffer多出了一些附加操作,效率上必然會打折扣。

但是,對于長度較小的字符串,”+“操作更加直觀,更具可讀性,有些時候可以稍微犧牲一下效率。
2)  deleteCharAt()

deleteCharAt() 方法用來刪除指定位置的字符,并將剩余的字符形成新的字符串。例如:

StringBuffer str = new StringBuffer("abcdef");str. deleteCharAt(3);


該代碼將會刪除索引值為3的字符,即”d“字符。

你也可以通過delete()方法一次性刪除多個字符,例如:

StringBuffer str = new StringBuffer("abcdef");str.delete(1, 4);


該代碼會刪除索引值為1~4之間的字符,包括索引值1,但不包括4。
3) insert() 方法

insert() 用來在指定位置插入字符串,可以認為是append()的升級版。例如:

StringBuffer str = new StringBuffer("abcdef");str.insert(3, "xyz");


最后str所指向的字符串為 abcdxyzef。
4) setCharAt() 方法

setCharAt() 方法用來修改指定位置的字符。例如:

StringBuffer str = new StringBuffer("abcdef");str.setCharAt(3, 'z');


該代碼將把索引值為3的字符修改為 z,最后str所指向的字符串為 abczef。

以上僅僅是部分常用方法的簡單說明,更多方法和解釋請查閱API文檔。
String和StringBuffer的效率對比

為了更加明顯地看出它們的執行效率,下面的代碼,將26個英文字母加了10000次。

public class Demo {  public static void main(String[] args){    String fragment = "abcdefghijklmnopqrstuvwxyz";    int times = 10000;        // 通過String對象    long timeStart1 = System.currentTimeMillis();    String str1 = "";    for (int i=0; i<times; i++) {      str1 += fragment;    }    long timeEnd1 = System.currentTimeMillis();    System.out.println("String: " + (timeEnd1 - timeStart1) + "ms");        // 通過StringBuffer    long timeStart2 = System.currentTimeMillis();    StringBuffer str2 = new StringBuffer();    for (int i=0; i<times; i++) {      str2.append(fragment);    }    long timeEnd2 = System.currentTimeMillis();    System.out.println("StringBuffer: " + (timeEnd2 - timeStart2) + "ms");  }}

運行結果:

String: 5287msStringBuffer: 3ms

結論很明顯,StringBuffer的執行效率比String快上千倍,這個差異隨著疊加次數的增加越來越明顯,當疊加次數達到30000次的時候,運行結果為:

String: 35923msStringBuffer: 8ms

所以,強烈建議在涉及大量字符串操作時使用StringBuffer。
StringBuilder類

StringBuilder類和StringBuffer類功能基本相似,方法也差不多,主要區別在于StringBuffer類的方法是多線程安全的,而StringBuilder不是線程安全的,相比而言,StringBuilder類會略微快一點。

StringBuffer、StringBuilder、String中都實現了CharSequence接口。

CharSequence是一個定義字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start, int end) 這幾個API。

StringBuffer、StringBuilder、String對CharSequence接口的實現過程不一樣,如下圖所示:

可見,String直接實現了CharSequence接口;StringBuilder 和 StringBuffer都是可變的字符序列,它們都繼承于AbstractStringBuilder,實現了CharSequence接口。
總結

線程安全:

StringBuffer:線程安全
StringBuilder:線程不安全

速度:
一般情況下,速度從快到慢為 StringBuilder > StringBuffer > String,當然這是相對的,不是絕對的。

使用環境:
操作少量的數據使用 String;
單線程操作大量數據使用 StringBuilder;
多線程操作大量數據使用 StringBuffer。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线播放九色快色| 亚洲女人被黑人巨大进入| 欧美黑人国产人伦爽爽爽| 91免费版网站入口| 日韩在线欧美在线| 成人www视频在线观看| 国产精选久久久久久| 日韩精品一区二区三区第95| 91精品啪aⅴ在线观看国产| 懂色aⅴ精品一区二区三区蜜月| 中日韩美女免费视频网站在线观看| 91精品国产综合久久久久久久久| 日本亚洲欧洲色| 亚洲一区二区久久久久久| 国产国语videosex另类| 国产精品成人一区二区三区吃奶| 国产日韩欧美自拍| 91在线视频免费| 岛国av一区二区| 国产精品成熟老女人| 深夜福利亚洲导航| 色综合老司机第九色激情| 欧美激情视频一区| 日韩精品福利在线| 国产日韩视频在线观看| 亚洲区bt下载| 国产一区二区av| 68精品国产免费久久久久久婷婷| 欧美日韩中文字幕日韩欧美| 欧美日韩国产二区| 国产精品网站大全| 在线视频精品一| 亚洲人线精品午夜| 亚洲第一av网| 日韩av影院在线观看| 国产91热爆ts人妖在线| 欧美成人亚洲成人| 91地址最新发布| 成人在线一区二区| 久久久久久久久爱| 国产精品劲爆视频| 久热在线中文字幕色999舞| www.欧美视频| 26uuu另类亚洲欧美日本一| 午夜精品一区二区三区视频免费看| 亚洲永久在线观看| 亚洲18私人小影院| 日韩电影大片中文字幕| 国产成人精品网站| 国产日韩欧美中文| 欧美精品一区二区免费| 久久久久久91香蕉国产| 青青久久aⅴ北条麻妃| 亚洲18私人小影院| 岛国av一区二区| 夜夜嗨av一区二区三区四区| 国产成人免费91av在线| 国产91精品网站| 欧美日韩加勒比精品一区| 亚洲精品丝袜日韩| 精品中文字幕视频| 精品国产电影一区| 精品国产欧美一区二区三区成人| 国产日产欧美a一级在线| 亚洲人a成www在线影院| 国产精品久久中文| 国产亚洲精品综合一区91| 欧美激情视频在线免费观看 欧美视频免费一| 国产人妖伪娘一区91| 亚洲小视频在线| 最新亚洲国产精品| 精品久久国产精品| 日韩在线播放视频| 国产综合色香蕉精品| 久久久噜久噜久久综合| 精品国产91久久久久久老师| 亚洲黄色av网站| 一区二区欧美激情| 亚洲精品在线91| 亚洲视频一区二区三区| 中文字幕日韩av综合精品| 国产精品白丝av嫩草影院| 亚洲色图在线观看| 中文字幕日韩精品在线| 中文字幕亚洲激情| 久久久久中文字幕| 一区二区三区高清国产| 日本一区二三区好的精华液| 亚洲a级在线播放观看| 色综合久久久久久中文网| 91免费精品视频| 国产精品久久久久77777| 欧美一二三视频| 日韩精品中文字| 国产区精品在线观看| 正在播放欧美视频| 色多多国产成人永久免费网站| 另类美女黄大片| 国产福利视频一区| 国产精品一区二区久久| 国产精品xxx视频| 久久99久久久久久久噜噜| 26uuu亚洲伊人春色| 亚洲最大成人免费视频| 日韩电影免费在线观看| 国产精品美女久久久久av超清| 91影视免费在线观看| 国产精品自拍网| 久久全国免费视频| 亚洲free性xxxx护士白浆| 欧美在线激情视频| 欧美午夜视频在线观看| 91亚洲精品在线观看| 91久久精品日日躁夜夜躁国产| 亲子乱一区二区三区电影| 国产日韩在线亚洲字幕中文| 久久综合伊人77777蜜臀| 国产精品第8页| 亚洲国产免费av| 国产成人高潮免费观看精品| 日韩av手机在线看| 九九视频直播综合网| 日韩精品视频在线观看免费| 精品久久久久久久久久久久久久| 国产精品久久久久久久久久小说| 中文字幕欧美亚洲| 91成人在线观看国产| 岛国av一区二区在线在线观看| 亚洲在线一区二区| 欧美日韩国产91| xvideos亚洲人网站| 精品av在线播放| 久久777国产线看观看精品| 国产九九精品视频| 色偷偷偷亚洲综合网另类| 欧美另类高清videos| 中文字幕综合一区| 精品成人av一区| 在线视频免费一区二区| 国产美女精品免费电影| 色与欲影视天天看综合网| 欧美激情亚洲国产| 亚洲香蕉成视频在线观看| 欧美成人精品在线视频| 欧美午夜宅男影院在线观看| 91美女片黄在线观| 日韩专区在线观看| 精品一区二区电影| 日韩成人av一区| 中文字幕日韩有码| 亚洲**2019国产| 国产精品www色诱视频| 蜜臀久久99精品久久久无需会员| 亚洲一区二区久久久| 一区二区三区四区在线观看视频| 国内精品模特av私拍在线观看| 97精品国产97久久久久久春色| 久久影视电视剧凤归四时歌| 欧美理论在线观看| 韩国19禁主播vip福利视频| 国产视频观看一区| 4438全国亚洲精品在线观看视频| 成人黄色短视频在线观看| 日韩欧美视频一区二区三区|