Java中的String類和StringBuilder類複習

1 String類的常用方法



說明:

(1) 字符串str中字符的索引從0開始,範圍爲0到str.length()-1

(2) 使用indexOf進行字符或字符串查找時,如果匹配返回位置索引;如果沒有匹配結果,返回-1

(3) 使用substring(beginIndex ,endIndex) 進行字符串截取時,包括beginIndex位置的字符,不包括endIndex位置的字符

(4) 每次new一個字符串就是產生一個新的對象,即便兩個字符串的內容相同,使用 ”==”比較時也爲”false”;如果只需比較內容是否相同,應使用”equals()”方法,若忽略大小寫則用“equalsIgnoreCase()”方法。

2 字符串生成器StringBuilder類

(1) 對於創建成功的字符串對象,它的長度是固定的,內容不能被改變和編譯。雖然使用“+”可以達到附加新字符或字符串的目的,但“+”會產生一個新的String實例,會在內存中創建新的字符串對象。如果重複地對字符串進行修改,將極大地增加系統開銷。

(2) 在Java中,除了可以使用 String 類來存儲字符串,還可以使用 StringBuilder 類或 StringBuffer 類存儲字符串,那麼它們之間有什麼區別呢?使用String類時,當頻繁操作字符串時,就會額外產生很多臨時變量,使用 StringBuilder 或 StringBuffer 就可以避免這個問題。至於 StringBuilder 和StringBuffer ,它們基本相似,不同之處,StringBuffer 是線程安全的,而 StringBuilder 則沒有實現線程安全功能,所以性能略高。因此一般情況下,如果需要創建一個內容可變的字符串對象,應優先考慮使用 StringBuilder 類。

(3) StringBuilder類創建對象的方式:

StringBuilder str = new StringBuilder("captain");
System.out.println(str);
(4) StringBuilder類的常用方法


(5) String類與StringBuilder類修改字符的性能比較

程序示例:

package captain;

public class StringBuilderDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//String類空字符串修改10000次執行的時間。
		String str = "";
		long startTime = System.currentTimeMillis();
		for(int i = 0; i < 10000; i++)
			str = str + i;
		long endTime = System.currentTimeMillis();
		long time = endTime - startTime;
		System.out.println("String類修改字符串消耗的時間爲:" + time);
		
		//StringBuilder類空字符串修改10000次執行的時間。
		StringBuilder strb = new StringBuilder("");
		startTime = System.currentTimeMillis();
		for(int j = 0; j < 10000; j++)
			strb.append(j);
		endTime = System.currentTimeMillis();
		time = endTime - startTime;
		System.out.println("StringBuilder類修改字符串消耗的時間爲:" + time);
	}

}
執行結果:

String類修改字符串消耗的時間爲:233
StringBuilder類修改字符串消耗的時間爲:1

通過這一示例可以看出,執行的時間差距很大。因此,如果在程序中頻繁地附加字符串,建議使用StringBuilder類,它的長度可以動態增長,而不會像String類一樣會每次創建新的對象。故而對於字符串的修改操作,StringBuilder類在時間性能和系統消耗方面都要大幅優於String類。

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