一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 中String StringBuilder 與 StringBuffer詳解及用法實例

Java 中String StringBuilder 與 StringBuffer詳解及用法實例

2020-08-10 17:30java教程網 Java教程

這篇文章主要介紹了Java 中String StringBuilder 與 StringBuffer詳解及用法實例的相關資料,需要的朋友可以參考下

在Android/Java開發中,用來處理字符串常用的類有3種: StringStringBuilderStringBuffer

它們的異同點:

1) 都是 final 類, 都不允許被繼承;
2) String 長度是不可變的, StringBuffer、StringBuilder 長度是可變的;
3) StringBuffer 是線程安全的, StringBuilder 不是線程安全的。

String VS StringBuffer

String 類型和StringBuffer的主要性能區別:String是不可變的對象, 因此在每次對String 類型進行改變的時候,都會生成一個新的 String 對象,然后將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因為每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以后, JVM 的 GC 就會開始工作,性能就會降低。

使用 StringBuffer 類時,每次都會對 StringBuffer 對象本身進行操作,而不是生成新的對象并改變對象引用。所以多數情況下推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下。

在某些特別情況下, String 對象的字符串拼接其實是被 Java Compiler 編譯成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度并不會比 StringBuffer 對象慢,例如:

?
1
2
String s1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

生成 String s1對象的速度并不比 StringBuffer慢。其實在Java Compiler里,自動做了如下轉換:

Java Compiler直接把上述第一條語句編譯為:

?
1
2
3
4
String s2 = “This is only a”;
String s3 = “ simple”;
String s4 = “ test”;
String s1 = s2 + s3 + s4;

這時候,Java Compiler會規規矩矩的按照原來的方式去做,String的concatenation(即+)操作利用了StringBuilder(或StringBuffer)的append方法實現,此時,對于上述情況,若s2,s3,s4采用String定義,拼接時需要額外創建一個StringBuffer(或StringBuilder),之后將StringBuffer轉換為String;若采用StringBuffer(或StringBuilder),則不需額外創建StringBuffer。

StringBuilder

StringBuilder是5.0新增的。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩沖區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先采用該類,因為在大多數實現中,它比 StringBuffer 要快。兩者的方法基本相同。

使用策略

1) 基本原則:如果要操作少量的數據,用String ;單線程操作大量數據,用StringBuilder ;多線程操作大量數據,用StringBuffer。

2) 不要使用String類的”+”來進行頻繁的拼接,因為那樣的性能極差的,應該使用StringBuffer或StringBuilder類,這在Java的優化上是一條比較重要的原則。例如:

?
1
2
3
4
5
6
7
8
9
10
11
String result = "";
for (String s : hugeArray) {
 result = result + s;
}
 
// 使用StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
 sb.append(s);
}
String result = sb.toString();

當出現上面的情況時,顯然我們要采用第二種方法,因為第一種方法,每次循環都會創建一個String result用于保存結果,除此之外二者基本相同.

3) StringBuilder一般使用在方法內部來完成類似”+”功能,因為是線程不安全的,所以用完以后可以丟棄。StringBuffer主要用在全局變量中。

4) 相同情況下使用 StirngBuilder 相比使用 StringBuffer 僅能獲得 10%~15% 左右的性能提升,但卻要冒多線程不安全的風險。而在現實的模塊化編程中,負責某一模塊的程序員不一定能清晰地判斷該模塊是否會放入多線程的環境中運行,因此:除非確定系統的瓶頸是在 StringBuffer 上,并且確定你的模塊不會運行在多線程模式下,才可以采用StringBuilder;否則還是用StringBuffer。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_35101189/article/details/55047390

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜在线观看免费观看 视频 | 欧美影院一区二区三区 | caonila国产在线观看 | 四虎成人免费观看在线网址 | 久久精品人人做人人爽97 | 日韩 国产 欧美 | 帅小伙和警官同性3p | 暖暖暖免费观看在线观看 | 二区三区不卡不卡视频 | 小草观看免费高清视频 | 麻豆婷婷 | 国产免费视 | 日韩一品在线播放视频一品免费 | 国产精品永久免费视频观看 | 亚洲国产福利精品一区二区 | 欧美性xxxxxx爱 | 欧美精品一区二区三区久久 | 人人人人人看碰人人免费 | 无套内射在线观看THEPORN | 日本嫩交 | 日本欧美不卡一区二区三区在线 | 成人免费国产欧美日韩你懂的 | 欧美国产日韩在线 | 97久久精品午夜一区二区 | 精品国产原创在线观看视频 | 国产成人手机在线好好热 | 精品在线播放视频 | 精品视频一区二区三区免费 | 国产精品国产香蕉在线观看网 | 4455永久在线观免费看片 | 风间由美一区二区播放合集 | 精品国产国产精2020久久日 | 免费观看视频高清在线 | 精精国产www视频在线观看免费 | 男人天堂新 | 日本高清二三四本2021 | 韩国三级动漫 | 超大阿力gaysex | 波多野结衣在线观看中文字幕 | 亚洲嫩模吧粉嫩粉嫩冒白浆 | 亚洲AV久久久久久久无码 |