java之StringBuider与StringBuffer
StringBuider與StringBuffer類比String更加靈活,只要使用字符串的地方,都可以使用StringBuider與StringBuffer類。三者的共同之處都是 final 類,不允許被繼承,這主要是從性能和安全性上考慮的,因?yàn)檫@幾個(gè)類都是經(jīng)常被使用著的,且考慮到防止其中的參數(shù)被修改影響到其它的應(yīng)用。
二、StringBuider
1)構(gòu)造方法
StringBuider() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?構(gòu)建容量為16的空字符串構(gòu)建器
StringBuider(int capacity) ? ? ? ? ? ? ? ? ? ?構(gòu)建指定容量的構(gòu)建器
StringBuider(String s) ? ? ? ? ? ? ? ? ? ? ? ? ?構(gòu)建指定字符串的構(gòu)建器
2)普通方法
append(char[] data) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??StringBuider? ? ?//追加字符數(shù)組到構(gòu)造器
append(char[] data, int offset, int len) ? ?StringBuider? ? ?//追加data的之?dāng)?shù)組到構(gòu)造器
append(aPrimitveType v) ? ? ? ? ? ? ? ? ? ? ? ?StringBuider? ? ?//將基本類型作為字符串追加到字符串構(gòu)造器
append(String s) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?StringBuider? ? ?//追加一個(gè)字符串到字符串構(gòu)造器
delete(int startIndex, int endIndex) ? ? ? ? ?StringBuider? ? ?//刪除從startIndex到endIndex-1的字符
deleteCharAt(int index) ? ? ? ? ? ? ? ? ? ? ? ? ? ?StringBuider? ? ? //刪除指定索引位置的字符
insert(int index,char[] data, int offset,int len) ?StringBuider?//指定索引插入數(shù)組data的之?dāng)?shù)組到構(gòu)造器
insert(int?offset,?char[] data) ? ? ? ? ? ? ? ? ? ??StringBuider ? ? ?//向構(gòu)造器的偏移位置插入data數(shù)組
insert(int offset,?aPrimitveType v) ? ? ? ? ? ?StringBuider ? ? //向構(gòu)造器的偏移位置插入一個(gè)轉(zhuǎn)換為字符串的數(shù)值
replace(int startIndex, int endIndex, String s) ?StringBuider?//從startIndex到endIndex-1的位置的字符替換為指定的字符串
reverse() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?StringBuider ? ? //倒置構(gòu)建器的字符串
setCharAt(int index, char ch) ? ? ? ? ? ? ? ? ?void ? ? ? ? ? ? ? ? ? ?//將索引的字符更新為新字符
?以上的返回值都是該對(duì)象本身的引用。
實(shí)例:
?
StringBuilder stringBuilder=new StringBuilder();stringBuilder.append("a");stringBuilder.append('a');stringBuilder.delete(0, 2);stringBuilder.reverse();stringBuilder.insert(stringBuilder.length()-1, "e");?
3)其他方法
charAt(int index) ? ? ?char ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//獲取指定索引的字符
toString() ? ?String
capacity() ? int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //返回構(gòu)造器的容量
length() ? ? ? int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //字符串構(gòu)建器的實(shí)際長(zhǎng)度
setLength(int newLength) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設(shè)置構(gòu)建器的新字符數(shù)
substring(int startIndex) ? String ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//返回從startIndex的子字符串
substring(int startIndex, int endIndex) ? String ? ? ? ? ? ? ? ? //返回從startIndex到endIndex的子字符串
trimToSize() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//減少字符串構(gòu)建器的存儲(chǔ)大小
? ? ? ? setLength(int newLength) ?方法設(shè)置字符串的構(gòu)建長(zhǎng)度,如果newLength大于等于當(dāng)前的長(zhǎng)度,則字符串構(gòu)建器會(huì)自動(dòng)追加足夠的空字符('\u0000'),使其長(zhǎng)度length變成newLength,如果newLength小于字符串構(gòu)建器的長(zhǎng)度,則字符串構(gòu)建器會(huì)被截取到恰好等于newLength的個(gè)數(shù)。newLength必須大于等于0。
? ? ? ?trimToSize()方法的作用是將StringBuffer對(duì)象的中存儲(chǔ)空間縮小到和字符串長(zhǎng)度一樣的長(zhǎng)度,減少空間的浪費(fèi)。
三、StringBuffer
? ? ? ?StringBuffer線程安全的可變字符序列。一個(gè)類似于 String 的字符串緩沖區(qū),但不能修改。雖然在任意時(shí)間點(diǎn)上它都包含某種特定的字符序列,但通過(guò)某些方法調(diào)用可以改變?cè)撔蛄械拈L(zhǎng)度和內(nèi)容。可將字符串緩沖區(qū)安全地用于多個(gè)線程。可以在必要時(shí)對(duì)這些方法進(jìn)行同步,因此任意特定實(shí)例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個(gè)線程進(jìn)行的方法調(diào)用順序一致。
? ? ? ? StringBuffer 與StringBuilder 相似,主要操作有 append 和 insert 方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。每個(gè)方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串,然后將該字符串的字符添加或插入到字符串緩沖區(qū)中。append 方法始終將這些字符添加到緩沖區(qū)的末端,而 insert 方法則在指定的點(diǎn)添加字符。
四、String、StringBuffer 與 StringBuilder
1) String類是final類,String類不能被繼承,并且它的成員方法都默認(rèn)為final方法。在Java中,被final修飾的類是不允許被繼承的,并且該類中的成員方法都默認(rèn)為final方法。在早期的JVM實(shí)現(xiàn)版本中,被final修飾的方法會(huì)被轉(zhuǎn)為內(nèi)嵌調(diào)用以提升執(zhí)行效率。而從Java SE5/6開始,就漸漸擯棄這種方式了。因此在現(xiàn)在的Java SE版本中,不需要考慮用final去提升方法調(diào)用效率。只有在確定不想讓該方法被覆蓋時(shí),才將方法設(shè)置為final。
2) StringBuffer 與 StringBuilder 功能相似,只是 StringBuffer 是線程安全,可以不需要額外的同步用于多線程中。StringBuilder 是非同步,運(yùn)行于多線程中就需要使用著單獨(dú)同步處理,但是速度就比 StringBuffer 快。二者之間的共同點(diǎn)都可以通過(guò)append、insert進(jìn)行字符串的操作。
3) String 實(shí)現(xiàn)了三個(gè)接口:Serializable、Comparable<String>、CharSequence,而 StringBuffer 及 StringBuilder 只實(shí)現(xiàn)了兩個(gè)接口Serializable、CharSequence,相比之下 String 的實(shí)例可以通過(guò) compareTo 方法進(jìn)行比較,而其它兩個(gè)就不可以。
4) 對(duì)字符串進(jìn)行修改的時(shí)候,需要使用StringBuffer和StringBuilder類。
和String類不同的是,StringBuffer和StringBuilder類的對(duì)象能夠被多次的修改,并且不產(chǎn)生新的未使用對(duì)象。
StringBuilder類在Java 5中被提出,它和StringBuffer之間的最大不同在于StringBuilder的方法不是線程安全的(不能同步訪問(wèn))。由于StringBuilder相較于StringBuffer有速度優(yōu)勢(shì),所以多數(shù)情況下建議使用StringBuilder類。然而在應(yīng)用程序要求線程安全的情況下,則必須使用StringBuffer類。
5) String對(duì)于直接相加字符串,效率很高,在編譯器便確定了它的值。對(duì)于間接相加(即包含字符串引用),效率要比直接相加低,因?yàn)樵诰幾g器不會(huì)對(duì)引用變量進(jìn)行優(yōu)化。
6) String、StringBuilder、StringBuffer三者在修改下的執(zhí)行效率:
StringBuilder > StringBuffer > String
字符串相加操作或者改動(dòng)較少的情況下,建議使用 String。字符串相加操作較多的情況下,建議使用StringBuilder,如果采用了多線程,則使用StringBuffer。
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java之StringBuider与StringBuffer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: i7主板配置清单?
- 下一篇: java之正则表达式