1.StringBuffer
1)StringBuffer:線程不安全,也是對字符串的操作,位于java.lang包中赵辕,其底層也是字符數(shù)組,初始化長度是16概龄;但是它在String類的基礎(chǔ)上有了很大的改進还惠,最大的特點就是String是不可變。的旁钧,StringBuffer是可變化的吸重。
2)常用方法
增加:
在字符串后附加,參數(shù)可以是任意基本數(shù)據(jù)類型歪今,boolean會被轉(zhuǎn)為"true"或者"false"等
public StringBuffer append(Object obj);
public StringBuffer append(String str);
public StringBuffer append(double d) ;
在指定位置后增加字符串,參數(shù)可以是任意基本數(shù)據(jù)類型颜矿,boolean會被轉(zhuǎn)為"true"或者"false"等
public StringBuffer insert(int offset, boolean b);
public StringBuffer insert(String str);
public StringBuffer insert(double d) ;
刪除:
public StringBuffer deleteCharAt(int index) :刪除指定位置的字符
public StringBuffer delete(int start, int end):刪除指定位置到指定位置的字符串
修改:
public StringBuffer replace(int start, int end, String str):將指定位置的字符串(start到end位置的)替換為str
反轉(zhuǎn):
public synchronized StringBuffer reverse() :將字符串反轉(zhuǎn)返回寄猩。
3)String與StringBuffer:
<1>String是字符串常量,是不變的骑疆,在改動String時候?qū)嶋H上是又新建了一個String對象田篇;而StringBuffer是可變的替废,在改動的時候是先保存了原先對象的地址,然后將改動后的對象放在原地址上的泊柬。
//以對字符串的增加為例
String s1 = "ad";
System.out.println(s1.hashCode());//3107
s1+="sd";
System.out.println(s1.hashCode());//2989492
StringBuffer sb2 = new StringBuffer("ss");
System.out.println(sb2.hashCode());//460141958
sb2.append("as");
System.out.println(sb2.hashCode());//460141958
從結(jié)果上可以發(fā)現(xiàn)椎镣,String的地址發(fā)生了改變,StringBuffer的地址沒有發(fā)生改變兽赁。
<2>在使用字符串進行增刪改查操作時候状答,由于String將會新建對象后然后引用,這樣大大影響了性能刀崖,而StringBuffer是在原來的對象上修改的所以不存在這樣的影響惊科。當數(shù)據(jù)量巨大時候,String將會造成大量的對象的創(chuàng)建亮钦,而StringBuffer則是始終只有一個對象馆截。
String s1 = "sadfge";
String str1 = new String("sadgfe");
StringBuffer sb1 = new StringBuffer("sadfge");
long a1 = System.currentTimeMillis();
for(int i = 0;i<10000;i++){
s1+="sadfge";
}
long a2 = System.currentTimeMillis();
System.out.println(a2-a1);//501
long a3 = System.currentTimeMillis();
for(int i = 0;i<10000;i++){
sb1.append("sadfge");
}
long a4 = System.currentTimeMillis();
System.out.println(a4-a3);//0
從結(jié)果上可以看到在處理大數(shù)據(jù)量時候的明顯差距。
2.StringBuilder
StringBuilder是5.0新增的蜂莉,是線程不安全的蜡娶,其大部分方法與StringBuffer是一致的。
3.總結(jié)
1)對于數(shù)據(jù)量小的使用String;
2)數(shù)據(jù)量大且要求線程安全的使用StringBuffer;
3)數(shù)據(jù)量大且并無線程安全要求的使用StringBuilder映穗。