《Java編程思想》讀書筆記 第十三章 字符串
《Java編程思想》讀書筆記 第十三章 字符串
不可變String
String對象是不可變的,每一個看起來會修改String值的方法,實際上都是創建一個全新的String對象,以及包含修改後的字符串內容,而最初的String對象則絲毫未動
換句話說:任何對String的改變都會引發新的對象的生成
StringBuilder和StringBuffer
StringBuilder:線程不安全的
StringBuffer:線程安全的,要維持同步鎖,因此效率低
public static void testString() {
long start = System.currentTimeMillis();
String str = null;
for (int i = 0; i < 200000; i++)
str = str + i + ",";
System.out.println(System.currentTimeMillis() - start);
}
public static void testStringBuffer() {
long start = System.currentTimeMillis();
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < 200000; i++)
sbf.append(i + ",");
System.out.println(System.currentTimeMillis() - start);
}
public static void testStringBuilder() {
long start = System.currentTimeMillis();
StringBuilder sbl = new StringBuilder();
for (int i = 0; i < 200000; i++)
sbl.append(i + ",");
System.out.println(System.currentTimeMillis() - start);
}
public static void main(String[] args) {
testString();
testStringBuffer();
testStringBuilder();
}
可以很明顯的看出來:效率:**StringBuilder > StringBuffer > String**
三者使用情景:
- 如果要操作少量的數據 --> String
- 單線程中,在字符串緩衝區下操作大量數據 --> StringBuilder
- 多線程中,在字符串緩衝區下操作大量數據 --> StringBuffer
最後更新:2017-06-15 14:01:40