參考鏈接: Java中的String vs StringBuilder vs StringBuffer
下述文章資料來源于: W3CSCHOOL離線版的Java教程 Java JDK 6.0開發手冊 Java開發從入門到精通(陳小玉版)?
StringBuffer和String選擇的異同 StringBuffer在進行字符串處理時,不生成新的對象,在內存的使用上要優于String類; 二者有一個最顯著的區別在于,對于StringBuffer對象的每次修改都會改變對象自身,這點是和String類最大的區別?
Java StringBuffer和StringBuilder類 當對字符串進行修改的時候,需要使用StringBuffer和StringBuilder類。?
和String類不同的是,StringBuffer和StringBuilder類的對象能夠被多次的修改,并且不產生新的未使用對象。?
StringBuilder類在Java 5中被提出,它和StringBuffer之間的最大不同在于StringBuilder的方法不是線程安全的(線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。線程不安全就是不提供數據訪問保護,有可能出現多個線程先后更改數據造成所得到的數據是臟數據)。?
由于StringBuilder相較于StringBuffer有速度優勢,所以多數情況下建議使用StringBuilder類。然而在應用程序要求線程安全的情況下,則必須使用StringBuffer類。?
在Java中規定,一旦聲明String的內容就不可再改變,如果要改變,改變的肯定是String的引用地址。 如果一個字符串需要經常被改變,則必須使用 StringBuffer類。 在String類中可以通過“+”來連接字符串,在StringBuffer中只能使用方法append()來連接字符串。?
public class Test{
?
? ? public static void main(String args[]){
? ? ? ?StringBuffer sBuffer = new StringBuffer(" test");
? ? ? ?sBuffer.append(" String Buffer");
? ? ? ?System.out.println(sBuffer);??
? ?}
}
?
以上實例編譯運行結果如下:?
test String Buffer
?
StringBuffer 方法 以下是StringBuffer類支持的主要方法:?
序號方法描述1public StringBuffer append(String s) 將指定的字符串追加到此字符序列。2public StringBuffer reverse() 將此字符序列用其反轉形式取代。3public delete(int start, int end)4public insert(int offset, int i) 將 int 參數的字符串表示形式插入此序列中。5replace(int start, int end, String str) 使用給定 String 中的字符替換此序列的子字符串中的字符。
下面的列表里的方法和String類的方法類似:? 使用append()來連接字符串?
public class StringBufferT1{
? ? public static void main(String args[]){
? ? ? ? StringBuffer buf = new StringBuffer() ;? ? // 聲明StringBuffer對象?
? ? ? ? buf.append("Hello ") ;? ? ? ? ? ? ? ? ? ? // 向StringBuffer中添加內容
? ? ? ? buf.append("World").append("!!!") ;? ? ? ? // 可以連續調用append()方法
? ? ? ? buf.append("\n") ;? ? ? ? ? ? ? ? ? ? ? ? // 添加一個轉義字符
? ? ? ? buf.append("數字 = ").append(1).append("\n") ;? ? // 添加數字
? ? ? ? buf.append("字符 = ").append('C').append("\n");? ? ?// 添加字符
? ? ? ? buf.append("布爾 = ").append(true) ;? ? // 添加布爾值
? ? ? ? System.out.println(buf) ;? ? ? ? ? ? // 直接輸出對象,調用toString()
? ? }
};
?
在任意處為StringBuffer添加內容?
public class StringBufferT3{
? ? public static void main(String args[]){
? ? ? ? StringBuffer buf = new StringBuffer() ;? ? // 聲明StringBuffer對象?
? ? ? ? buf.append("World!!") ;? ? ? ? // 添加內容
? ? ? ? buf.insert(0,"Hello ") ;? ? ? ? // 在第一個內容之前添加內容
? ? ? ? System.out.println(buf) ;
? ? ? ? buf.insert(buf.length(),"MM~") ;? ? // 在最后添加內容
? ? ? ? System.out.println(buf) ;
? ? }
};
?
在任意處為StringBuffer添加內容?
public class StringBufferT5{
? ? public static void main(String args[]){
? ? ? ? StringBuffer buf = new StringBuffer() ;? ? // 聲明StringBuffer對象?
? ? ? ? buf.append("Hello ").append("World!!") ;? ? ? ? // 向StringBuffer添加內容
? ? ? ? buf.replace(6,11,"AAA") ;? ? ? ? // 將world的內容替換
? ? ? ? System.out.println("內容替換之后的結果:" + buf) ;? ? // 輸出內容
? ? }
};
?
從StringBuffer中刪除指定范圍的字符串?
public class StringBufferT7{
? ? public static void main(String args[]){
? ? ? ? StringBuffer buf = new StringBuffer() ;? ? // 聲明StringBuffer對象?
? ? ? ? buf.append("Hello ").append("World!!") ;? ? ? ? // 向StringBuffer添加內容
? ? ? ? buf.replace(6,11,"AAA") ;? ? ? ? // 將world的內容替換
? ? ? ? String str = buf.delete(6,15).toString() ;? ? // 刪除指定范圍中的內容
? ? ? ? System.out.println("刪除之后的結果:" + str) ;? ? // 輸出內容
? ? }
};