本文是在以下這篇博文的的基礎之上記性修改的:
http://blog.csdn.net/yirentianran/article/details/2871417
在java中有三個類來負責字符的操作:
1.Character進行單個字符的操作
2.String對一串字符進行操作。是不可變類。
3.StringBuffer也是對一串字符進行操作。但是是可變類。
String:
是不可變對象,一旦創建,就不能修改它的值
對於已經存在的String對象的修改都是重新創建一個新的對象,然後把新的值保存進去
String事故final類,不能被繼承
StringBuffer:
是一個可變對象,當對它進行修改的時候不會像String那樣重新創建對象,而是改變當前對象的內容
只能通過構造函數來建立:StringBuffer sb=new StringBuffer("");
不能通過賦值符號對它進行賦值:sb="welcome to here"; //error
對象被建立後,在內存中就會分配內存空間,並初試保存一個null
向StringBuffer中賦值的時候可以使用append()方法: sb.append();
字符串連接效率中,StringBuffer要比String效率高
String str=new Stirng("Welcome ");
str+="here";
操作符“+”的處理過程實際上是通過建立一個StringBuffer,然後調用append(),最後調用StringBuffer的toString(),這樣的話String的連接操作就比StirngBuffer的多出了一些附加操作,效率就降低了
由於String對象是不可變對象,每次操作Stirng對象都會重新建立新的對象來保存新的值,這樣原來的對象就沒用了,就要進行垃圾回收,這也是要影響性能的
以下比較String和StirngBuffer連接的效率
public class Test1 {
public static void main(String[] args)
{
String tempstr="abcdefghijklmnopqrstuvwxyz";
int times=10000;
long t1=System.currentTimeMillis();
String str="";
for(int i=0;i<times;i++)
str=str+tempstr;
long t2=System.currentTimeMillis();
System.out.println("it costs:"+(t2-t1));
}
}
使用String時,耗時基本上在3秒左右
public class Test1 {
public static void main(String[] args)
{
String tempstr="abcdefghijklmnopqrstuvwxyz";
int times=10000;
long t1=System.currentTimeMillis();
StringBuffer sb=new StringBuffer();
for(int i=0;i<times;i++)
sb.append(tempstr);
long t2=System.currentTimeMillis();
System.out.println("it costs:"+(t2-t1));
}
}
時間不穩定,維持在1秒或者2秒,總的來說效率要高於String。
所以,在程序中要對字符串進行頻繁的修改連接操作的話,使用StirngBuffer的效率要高一些。