13、StringBuffer與StringBuilder

StringBuffer與StringBuilder
一、StringBuffer類
1、StringBuffer類介紹
StringBuffer類(也叫做字符串緩衝區),它的存儲容量會隨着內容的增加或減少自動的調整。StringBuffer解決了String固定大小和低效的缺點。

2、什麼時候使用StringBuffer
如果涉及到大量字符反覆連接的時候就適合使用StringBuffer,示例:

 Employee emp = ……;
String sql = "select  *  from  employee where 1=1 ";
if (emp.getEname() != null) {
	sql += "and  ename='jack' ";
}
if (emp.getSal() != null) {
	sql += "and  sal>=3000 ";
}
if (emp.getDeptno() != null) {
	sql += "and  deptno=10";
}

3、StringBuffer構造函數
在這裏插入圖片描述
4、StringBuffer常用方法
在這裏插入圖片描述
二、StringBuilder類
1、StringBuilder類介紹
API使用和StringBuffer一樣,區別在於使用於單線程環境下。而在多線程環境下,也就是說有多個線程訪問同一個StringBuffer那麼是安全的,內容不會亂。一般情況下我們會直接使用StringBuffer多點。而StringBuilder在多線程環境下就不安全了。

2、StringBuilder常用方法
1.append( [各種類型] ): 會把數據添到StringBuilder的後面。
2. indexOf(): 從指定的索引處開始,返回第一次出現的指定子字符串在該字符串中的索引。
3. delete(): 將當前字符串中從start(包含)開始到end(不包含)之間的內容移除
4. insert(): 將數據的字符串表示形式插入此序列中。
5. substring(): 取StringBuffer中的子串。
6. reverse(): 將此字符序列用其反轉形式取代。

3、示例

public class TestDemoStringBuilder { 
	public static void main(String[] args) {
		StringBuilder strbu = new StringBuilder("qiao");
		//字符串的容量和長度
		System.out.println("長度是:"+strbu.length());//4
		
		//StringBuilder insert(int offset,String str)將str插入到當前字符串中offset指向的位置上;
		System.out.println("插入後新字符串:"+strbu.insert(3,"yes"));
		
		// StringBuilder append(String str) 將str插入到當前字符串的末尾位置;
		System.out.println("插入末尾後的新字符串:"+strbu.append("yueer"));
		
		// StringBuilder delete(int start ,int end)將當前字符串中從start(包含)開始到end(不包含)之間的內容移除;
		System.out.println("刪除後的新字符串:"+strbu.delete(2, 3));
		
		// StringBuilder replace(int start , int end , String str) 將當前字符串中start到end之間的內容全部用str的內容替換;
		System.out.println("替換內容後的新字符串:"+strbu.replace(1, 2, "yue"));
		
		// StringBuilder reverse() 實現字符串的反轉;
		System.out.println("反轉後的新字符串:"+strbu.reverse());
		
		// StringBuilder substring()
		System.out.println("下標2的新字符:"+strbu.substring(2));
		
		// StringBuilder indexOf()從指定的索引處開始,返回第一次出現的指定子字符串在該字符串中的索引。
		System.out.println("從下標2開始查找的字符“i”出現的位置:"+strbu.indexOf("i",2));
	}    
}

三、StringBuffer 與 StringBuilder 的區別
1、StringBuffer 與 StringBuilder 中的方法和功能完全是等價的。

2、只是StringBuffer 中的方法大都採用了 synchronized 關鍵字進行修飾,因此是線程安全的,而 StringBuilder 沒有這個修飾,可以被認爲是線程不安全的。

3、在單線程程序下,StringBuilder效率更快,StringBuilder 相較於 StringBuffer 有速度優勢,因爲它不需要加鎖,不具備多線程安全,而StringBuffer則每次都需要判斷鎖,效率相對更低。

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