摘要:當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用而不用的,就是速度的原因。
第三階段 JAVA常見對象的學習 StringBuffer和StringBuilder類 (一) StringBuffer類的概述 (1) 基本概述
下文以StringBuffer為例
前面我們用字符串做拼接,比較耗時并且也耗內存(每次都會構造一個新的string對象),而這種拼接操作又是比較常見的,為了解決這個問題,Java就提供了兩個字符串緩沖區類。StringBuffer和StringBuilder供我們使用。
簡單比較:
String 長度大小不可變
StringBuffer 長度可變、線程安全、速度較慢
StringBuilder 長度可變、線程不安全、速度最快
-----------------------------------------------------------------------------------------------------------------
解釋:
在執行速度方面的比較:StringBuilder > StringBuffer
StringBuffer與StringBuilder,他們是字符串變量,是可改變的對象,每當我們用它們對字符串做操作時,實際上是在一個對象上操作的,不像String一樣創建一些對象進行操作,所以速度就快了。
StringBuilder:線程非安全的
StringBuffer:線程是安全的(synchronized關鍵字進行修飾)
當我們在字符串緩沖區被多個線程使用時,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。
對于三者使用的總結:
1.如果要操作少量的數據用 = String
2.單線程操作字符串緩沖區 下操作大量數據 = StringBuilder
3.多線程操作字符串緩沖區 下操作大量數據 = StringBuffer
//無參構造方法 StringBuffer() //指定容量的字符串緩沖區對象 StringBuffer(int size) //指定字符串內容的字符串緩沖區對象 StringBuffer(String str)(二) StringBuffer 類的功能 (1) 添加功能
//可以把任意類型添加到字符串緩沖區里,并且返回字符串緩沖區本身(this) public StringBuffer append (String str) //在offset位置把任意類型的數據插入到字符串緩沖區中,并且返回字符串緩沖區本身(this) public StringBuffer insert(int offset,String str)(2) 刪除功能
//刪除指定位置的字符,并且返回本身 public StringBuffer deleteCharAt(int index) //刪除從指定位置開始指定位置結束的內容,并且返回本身 public StringBuffer delete(int start, int end)(3) 替換功能
//從start到end用str代替 public StringBuffer replace(int start,int end,String str)(4) 反轉功能
//Eg: 好你界世 → 世界你好 public StringBuffer reverse()(5) 截取功能
//從start位置開始截取,取以后字符串,但不返回本身,原數據不影響 public String substring(int start) //截取start到end之間的字符串 Publci Stirng substring(int start, int end)(三) String 和 StringBuffer 類相互轉換 (1) 轉換原因:
String → StringBuffer 是為了使用后者的功能
StringBuffer → String 可能需要后者的類型
(2) 轉換方式※ String → StringBuffer
String s = “Hello” //通過構造方法 StringBuffer a = new StringBuffer(s); //通過append()方法 StringBuffer a = new StringBuffer(); a.append(s);
※ StringBuffer → String
StringBuffer buffer = new StringBuffer(“java”) //通過構造方法 String str = new String (buffer); //通過toString()方法 String str = buffer.toString();(四) “+” 和 StringBuilder 類的愛恨情仇
首先java并不支持運算符重載。
(String類中的 “+”“+=”是java中僅有的兩個重載過的運算符)
所以我們可以通過“+”符號 將多個字符串進行拼接
將這段代碼利用 javap -c filename 反編譯
我們可以看到代碼被編譯器自動優化成使用StringBuilder方式拼接
運行效率得到了保證
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74928.html
摘要:原文經歷了上次的的六道坎發現編故事有點上癮,而且記憶效果也不錯哈哈,今天繼續嘮叨一下與的愛恨情仇。它是萬物的盡頭,繼承于虛無,為。接著由其衍生出第二神,另外一個,也就是。也估計是讓人引起誤解的源頭。所以接下來的問題就更容易了,比如。 原文:https://blog.crimx.com/2017/0... 經歷了上次的《JavaScript This 的六道坎》 發現編故事有點上癮,而且...
摘要:雖然性能極佳,而且提供了大量的特性,包括全文索引壓縮空間函數等,但不支持事務和行級鎖,而且最大的缺陷就是崩潰后無法安全恢復。 一 MyISAM 1.1 MyISAM簡介 MyISAM是MySQL的默認數據庫引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,而且提供了大量的特性,包括全...
摘要:雖然性能極佳,而且提供了大量的特性,包括全文索引壓縮空間函數等,但不支持事務和行級鎖,而且最大的缺陷就是崩潰后無法安全恢復。 Java面試通關手冊(Java學習指南,歡迎Star,會一直完善下去,歡迎建議和指導):https://github.com/Snailclimb/Java_Guide 一 MyISAM 1.1 MyISAM簡介 MyISAM是MySQL的默認數據庫引擎(5.5...
閱讀 1107·2021-11-23 10:05
閱讀 1785·2021-11-12 10:36
閱讀 1853·2019-08-30 15:56
閱讀 1684·2019-08-29 12:32
閱讀 3043·2019-08-28 18:04
閱讀 3428·2019-08-26 12:17
閱讀 2502·2019-08-26 11:35
閱讀 1240·2019-08-23 15:11