String StringBuilder StringBuffer
第1點 String是一個字符串常量,所以他是不可變的。
第2點 StringBuilder線程不安全,但是速度最快。
第3點 StringBuilde線程安全, 但是速度上會比StringBuilder慢,但還是比String快。
對應第1點的例子:
1 String firstString = "abc";
2 firstString = firstString + "1";
這種情況下第二行代碼中的第一個firstString和第二個firstString就不是同一個變量了,實質上它等價於:
2 String firstString = firstString + "1";
沒錯,系統內部又新建了一個firstString,所以這就是他慢的原因。
但是在這種特殊情況下不會受影響:
1 String firstString = "abc" + "d" +"e";
這種情況下實質上等價於:
1 String firstString = "abcde";
對應第2,3點例子:
1 String a = "abc",String b="cde";
2 String firstString = a+b;
3 StringBuilder firstStringBuilder = new StringBuilder();
4 firstStringBuilder.append(a).append(b);//通過firstStringBuilder.toString()方法使用
5 StringBuffer firstStringBuffer = new StringBuffer();
6 firstStringBuffer.append(a).append(b);//通過firstStringBuffer.toString()方法使用
第2、4、6行代碼就是他們合併代碼,最快是StringBuilder,然後到StringBuffer再到String。
所以總結以下:
1.如果要操作少量的數據用 String ,這性能影響也不大。
2.如果單線程下操作大量數據用 StringBuilder,單線程不用考慮線程安全問題,且這個速度快。
3.如果是多線程操作字符串緩衝區下操作大量數據用 StringBuffer,速度稍慢點,但安全保障。