String
Java中的String對象是final的,即 String 對象被創建之後就無法再對其進行修改。也就是說,儘管 String 類提供了替換(replace)、截取子串(subString)等方法,但這些方法都不是直接對原始的 String 對象進行操作,其操作結果會生成一個全新的字符串對象。當我們使用 + 來連接兩個 String 對象的時候,該操作同樣是創建出一個全新的字符串對象。
示例代碼:
String str = "aaabbbcccddd";
String newStr = str.replace('a', 'A');
System.out.println(newStr);
說明:
替換之後的結果是生成了一個全新的字符串對象:newStr 。
StringBuffer
StringBuffer類是對String類的一個補充,它用來表示內容可變的字符串,並提供了修改底層字符串的方法。StringBuffer類從 JDK 1.0 就已經提供。
該類是線程安全的。
示例代碼:
StringBuffer sb = new StringBuffer("aaabbbcccddd");
sb.replace(0, 3, "AAA");
System.out.println(sb.toString());
說明:
直接在 StringBuffer對象上進行操作。
API文檔鏈接:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuffer.html
StringBuilder
我們可以將 StringBuilder 類看做是對 StringBuffer 的進一步補充。StringBuilder 類也表示內容可變的字符串,並且該類與 StringBuffer 有着相同的操作界面,唯一的區別就是 StringBuilder 類不是線程安全的。
JDK 1.5 開始提供 StringBuilder 類。
API文檔鏈接:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html
效率的比較:
String str = "";
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 999999; i++){
str = str + i;
}
long endTime = System.currentTimeMillis();
System.out.println("執行時間:" + (endTime - beginTime));
運行時間太長了,沒有等到程序運行結束就被我直接終止了。
StringBuffer buffer = new StringBuffer("");
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 999999; i++){
buffer.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println("執行時間:" + (endTime - beginTime));
輸出:
執行時間:250
StringBuilder builder = new StringBuilder("");
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 99999; i++){
builder.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println("執行時間:" + (endTime - beginTime));
輸出:
執行時間:188
在數量級相對較小的時候,StringBuffer和StringBuilder的區別不大,只有當數量級相對較大的時候才能體會到他們兩個之間的效率差別。
StringBuffer爲了做到線程安全,犧牲一定的效率是必然的。
在java中,String + StringBuffer + StringBuilder 基本涵蓋了java字符串操作的所有方面,掌握好這三個工具類,基本的字符串處理可以無憂了。
原文出處:http://www.darkmi.com/blog/archives/1403
總結:String用於字符不需要做更改時,而使用+號,連接兩個字符,效率比較低,其低層實現原理是,String str ="this is string";
StringBuffer tem = new StringBuffer(str);
tmp.append("second string");
str = tmp.toString();
String 與StringBuffer,StringBuilder的區別
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.