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