摘要:是線程安全的,很多方法都是方法,而不是線程安全的,但其在單線程程序中的性能比要高。和類的區(qū)別也在于此,新引入的類不是線程安全的,但其在單線程中的性能比高。
這兩個類從功能上來講,幾乎沒有任何差別。
1.StringBuilder
首先,String類是不可變類,所以,任何對String的改變都會引發(fā)新的String對象的生成;新引入的StringBuilder類不是線程安全的.因為,HashMap不是線程安全的。
2,StringBuffer則是可變類,任何對它所指代的字符串的改變都不會產(chǎn)生新的對象.因此不會有新的String對象的生成。
HashTable是線程安全的,很多方法都是synchronized方法,而HashMap不是線程安全的,但其在單線程程序中的性能比HashTable要高。StringBuffer和StringBuilder類的區(qū)別也在于此,新引入的StringBuilder類不是線程安全的,但其在單線程中的性能比StringBuffer高。
所以,如果我們的程序是在單線程下運行,或者是不必考慮到線程同步問題,我們應該優(yōu)先使用StringBuilder類;當然,如果要保證線程安全,StringBuffer將會是更好的選擇。
內(nèi)容來自:http://blog.csdn.net/mad1989/article/details/26389541
StringBuffer常用方法
StringBuffer和StringBuilder的使用:
StringBuffer s = new StringBuffer();//這樣初始化出的StringBuffer對象是一個空的對象,
StringBuffer sb1 =new StringBuffer(512);//分配了長度512字節(jié)的字符緩沖區(qū)。
StringBuffer sb2 =new StringBuffer(“how are you?”)//創(chuàng)建帶有內(nèi)容的StringBuffer對象,在字符緩沖區(qū)中存放字符串“how are you?”
Append方法
public StringBuffer append(boolean b)//該方法的作用是追加內(nèi)容到當前StringBuffer對象的末尾,類似于字符串的連接,調(diào)用該方法以后,StringBuffer對象的內(nèi)容也發(fā)生改 變,例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.append("true");
則對象sb的值將變成”abctrue”
使用該方法進行字符串的連接,將比String更加節(jié)約內(nèi)容,經(jīng)常應用于數(shù)據(jù)庫SQL語句的連接。
DeleteCharAt方法
public StringBuffer deleteCharAt(int index)//該方法的作用是刪除指定位置的字符,然后將剩余的內(nèi)容形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“KMing”);
sb. deleteCharAt(1);//刪除字符串對象sb中索引值為1的字符,剩余的內(nèi)容組成一個新的字符串"King"。
還存在一個功能類似的delete方法:
public StringBuffer delete(int start,int end)
該方法的作用是刪除指定區(qū)間以內(nèi)的所有字符,包含start,不包含end索引值的區(qū)間。例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);//刪除索引值1(包括)到索引值4(不包括)之間的所有字符,則對象sb的值是"TString"。
Insert方法
public StringBuffer insert(int offset, boolean b),
該方法的作用是在StringBuffer對象中插入內(nèi)容,然后形成新的字符串.
StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,false);
該示例代碼的作用是在對象sb的索引值4的位置插入false值,形成新的字符串,則執(zhí)行以后對象sb的值是”TestfalseString”。
Reverse方法
public StringBuffer reverse()
該方法的作用是將StringBuffer對象中的內(nèi)容反轉(zhuǎn),然后形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
經(jīng)過反轉(zhuǎn)以后,對象sb中的內(nèi)容將變?yōu)椤眂ba”。
SetCharAt方法
public void setCharAt(int index, char ch)該方法的作用是修改對象中索引值為index位置的字符為新的字符ch。例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,’D’);
則對象sb的值將變成”aDc”。
TrimToSize方法
public void trimToSize()
該方法的作用是將StringBuffer對象的中存儲空間縮小到和字符串長度一樣的長度,減少空間的浪費,和String的trim()是一樣的作用,不在舉例。
Length方法
該方法的作用是獲取字符串長度 ,不用再說了吧。
Setlength方法
該方法的作用是設置字符串緩沖區(qū)大小。
StringBuffer sb=new StringBuffer();
sb.setlength(100);
如果用小于當前字符串長度的值調(diào)用setlength()方法,則新長度后面的字符將丟失。
.capacity方法
該方法的作用是獲取字符串的容量。
StringBuffer sb=new StringBuffer(“string”);
int i=sb.capacity();
EnsureCapacity方法
該方法的作用是重新設置字符串容量的大小。
StringBuffer sb=new StringBuffer();
sb.ensureCapacity(32); //預先設置sb的容量為32
GetChars方法
該方法的作用是將字符串的子字符串復制給數(shù)組。
getChars(int start,int end,char chars[],int charStart);
StringBuffer sb = new StringBuffer("I love You");
int begin = 0;
int end = 5;
//注意ch字符數(shù)組的長度一定要大于等于begin到end之間字符的長度
//小于的話會報ArrayIndexOutOfBoundsException
//如果大于的話,大于的字符會以空格補齊
char[] ch = new char[end-begin];
sb.getChars(begin, end, ch, 0);
System.out.println(ch);
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64419.html
摘要:當然大多數(shù)情況下就是我們是在單線程下進行的操作,所以大多數(shù)情況下是建議用而不用的,就是速度的原因。 第三階段 JAVA常見對象的學習 StringBuffer和StringBuilder類 (一) StringBuffer類的概述 (1) 基本概述 下文以StringBuffer為例 前面我們用字符串做拼接,比較耗時并且也耗內(nèi)存(每次都會構(gòu)造一個新的string對象),而這種拼接操作又...
摘要:和它們都是可變的字符串,不過它們之間的區(qū)別是初中級面試出現(xiàn)幾率十分高的一道題。區(qū)別線程安全線程安全,線程不安全。區(qū)別性能既然是線程安全的,它的所有公開方法都是同步的,是沒有對方法加鎖同步的,所以毫無疑問,的性能要遠大于。 StringBuffer 和 StringBuilder 它們都是可變的字符串,不過它們之間的區(qū)別是 Java 初中級面試出現(xiàn)幾率十分高的一道題。這么簡單的一道題,棧...
摘要:測試拼接速度測試的結(jié)果在循環(huán)中,拼接字符串的速度遠低于和利用查看字節(jié)碼文件,尋找其中的差異命令行執(zhí)行結(jié)果可以看出,拼接的時候也是通過的方法進行拼接的產(chǎn)生差異的原因是,在每次循環(huán)中,拼接的時候都了一個是線程安全的,只比稍慢了一點若不是 String、StringBuilder、StringBuffer 測試拼接速度 @Test public void testString() { ...
摘要:不指定容量會顯著降低性能一般使用在方法內(nèi)部來完成類似功能,因為是線程不安全的,所以用完以后可以丟棄。主要用在全局變量中相同情況下使用相比使用僅能獲得左右的性能提升,但卻要冒多線程不安全的風險。 String 作為最基礎的引用數(shù)據(jù)類型,日常的開發(fā)中被大量的使用。基于不可變的特性,一旦被過度地使用,堆內(nèi)存就會負荷不堪,甚至影響性能,為此,Java 設計者特意為 String 在方法區(qū)中開辟...
摘要:如果對于經(jīng)常改變內(nèi)容的字符串,使用效率高,但是它只適用于單線程的場景,在多線程場景下,容易導致數(shù)據(jù)不一致的現(xiàn)象出現(xiàn)。多線程場景下,要使用。在大部分情況下,線程安全的可變字符序列。可將字符串緩沖區(qū)安全地用于多個線程。 本人博客 http://www.cnblogs.com/runfor... 總結(jié): 1.String是字符串常量,StringBuffer是線程安全的字符串變量,Stri...
閱讀 1357·2021-11-24 09:39
閱讀 1346·2021-11-04 16:12
閱讀 2686·2021-09-24 09:47
閱讀 3337·2021-09-01 10:50
閱讀 1477·2019-08-30 15:55
閱讀 1423·2019-08-30 15:43
閱讀 642·2019-08-30 11:08
閱讀 3578·2019-08-23 18:33