1. 程式人生 > >Java中String,StringBuffer,StringBuilder的區別及相關常用函式

Java中String,StringBuffer,StringBuilder的區別及相關常用函式

今天在刷演算法題的時候,題目上傳入的引數型別是StringBuffer,而需要返回的卻是String型別。其中我在寫的時候用了兩種不同的寫法產生的結果相同,但是速度卻不同。所以在網上查找了一些資料。下面做一個String,StringBuffer,StringBuilder的區別及常用函式介紹。
1.String,StringBuffer,StringBuilder在JVM中的處理情況
在這三種情況下,String是執行最慢的。因為Java中對String物件進行的操作實際上是一個不斷建立新的物件並且將舊的物件回收的一個過程,所以執行速度很慢。而對StringBuffer,StringBuilder操作則不許要重新建立和回收直接在其上面更改便可。反映到程式中就是String在改變後的雜湊碼會和之前完全不同,而StringBuffer,StringBuilder的雜湊碼依然一樣。
如下

	String str="exception";
	System.out.println("String的雜湊碼"+str.hashCode());
	str=str+"%";
	System.out.println("String的雜湊碼"+str.hashCode());
	StringBuffer strbf=new StringBuffer("exception");
	System.out.println("StringBuffer的雜湊碼"+strbf.hashCode());
	strbf=strbf.append("%");
	System.out.println("StringBuffer的雜湊碼"+strbf.hashCode());
	StringBuilder strbd=new StringBuilder("exception");
	System.out.println("StringBuilder的雜湊碼"+strbd.hashCode());
	strbd=strbd.append("%");
	System.out.println("StringBuilder的雜湊碼"+strbd.hashCode());

執行結果如圖:
在這裡插入圖片描述
2.執行緒安全
String為不可變類,在java中不可變類都是執行緒安全的,
StringBuffer也是執行緒安全的。但是是靠StringBuffer中的方法中的synchronized關鍵詞來保持執行緒安全。
StringBuilder是執行緒不安全的。
3.String中常用方法

String str=new String("a");	//建立a字串
str.length();	//字串長度
str.charAt(int i);//第i個字元
str.indexOf(String p);	//p第一次出現的位置,沒有則返回-1
str.indexOf(String p,inti);	//p在第i個字元後第一次出現的位置,沒有則返回-1
str.concat(String t);	//將t附在字串的末尾,也可用+號來連線
str.substring(int i,int j); //從i到j的子字串
str.split(String a);	//把字串以a字元分開,返回一個字串陣列
str.hashCode();	//雜湊碼
str.equals(String a);	//和a字串進行比較是否相等

4.StringBuffer常用方法

StringBuffer strbf=new StringBuffer("exception");	//建立一個StringBuffer類的字串
strbf.append(String s);//將指定的字串追加到此字元序列。
strbf.reverse();		//將此字元序列用其反轉形式取代。
strbf.delete(int start, int end);	//移除此序列的子字串中的字元。
strbf.insert(int offset, int i);	//將 int 引數的字串表示形式插入此序列中。
strbf.replace(int start, int end, String str);	//使用給定 String 中的字元替換此序列的子字串中的字元。

最後說明一下作者本人水平有限,若有什麼地方整理不到位,請指出。同時這些常用方法在以後寫演算法題碰到新的,會進行更新