java學習記錄(五):關於String和StringBuffer的區別

本文是在以下這篇博文的的基礎之上記性修改的:

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的效率要高一些。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章