總結:
String 不可變字符串操作(操作較多 比較耗時)
StringBuffer 操作可變字符串(是線程安全的,多線程使用高效並且效率高,單線程中相對StringBuilder稍微低一些)
StringBuilder 操作可變字符串(線程不安全,單線程使用比較高效)
測試操作String 操作字符串所用時間
public static String testString(){
long start = System.currentTimeMillis();String str = "";
for(int i = 0 ; i < 200000 ;i++){
str = str + "add";
}
long end = System.currentTimeMillis();
System.out.println(end - start);
return str;
}
測試使用StringBuffer 操作字符串所用時間
long start = System.currentTimeMillis();
String str = "";
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i< 200000 ; i++){
stringBuilder.append("add");
}
long end = System.currentTimeMillis();
str = stringBuilder.toString();
System.out.println(end -start);
return str;
}
測試使用StringBuilder 操作字符串所用時間
public static String testStringBuilder(){
long start = System.currentTimeMillis();
StringBuilder stringBuilder = new StringBuilder();
String str = "";
for(int i = 0 ; i < 200000;i++ ){
stringBuilder.append("add");
}
str = stringBuilder.toString();
long end = System.currentTimeMillis();
System.out.println(end -start);
return str;
}
測試StringBuffer 和 StringBuilder 的線程安全性
public static void testStringBuilderS(){
new MThread("love_").start();
new MThread("you_").start();
new MThread("make_").start();
new MThread("sure_").start();
new MThread("yes_").start();
new MThread("are_").start();
new MThread("ok_").start();
new MThread("no_").start();
}
static class MThread extends Thread{
private String str;
public MThread(String str) {
super();
this.str = str;
}
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//分別註釋運行代碼觀察
// stringBuffer.append(str);
// System.out.println(stringBuffer.toString());
stringBuilder.append(str);
System.out.println(stringBuilder.toString());
}
}