StringBuilder類詳解和String、StringBuffer、StringBuilder的操作效對比
阿新 • • 發佈:2018-12-02
StringBuilder類詳解和String、StringBuffer、StringBuilder的操作效對比
1. StringBuilder類
- StringBuilder 和 StringBuffer 非常類似,均代表可變的字元序列,而且方法也一樣
① String:不可變字元序列
② StringBuffer:可變字元序列、效率低、執行緒安全
③ StringBuilder(JDK1.5):可變字元序列、效率高、執行緒不安全
④ 點選進入StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法 - String使用陷阱:
string s=“a”; //建立了一個字串 s=s+“b”; //實際上原來的"a"字串物件已經丟棄了,現在又產生了一個字串s+“b”(也就是"ab")。如果多次執行這些改變串內容的操作,會導致大量副本字串物件存留在記憶體中,降低效率。如果這樣的操作放到迴圈中,會極大影響程式的效能。
2. 比較一下String、StringBuffer、StringBuilder三者在插入的時候的效率。
- 對比Demo
//對比String,StringBuffer、StringBuilder三者之間的插入效率 @Test public void test1() { //定義String、StringBuffer、StringBuilder物件 String text = ""; long startTime = 0L; long endTime = 0L; StringBuffer buffer = new StringBuffer(""); StringBuilder builder = new StringBuilder(""); //往StringBuffer物件裡面新增20000個字元 startTime = System.currentTimeMillis(); for(int i = 0;i<20000;i++){ buffer.append(String.valueOf(i));} endTime = System.currentTimeMillis(); System.out.println("StringBuffer的執行時間:"+(endTime-startTime)); //往StringBuilder物件裡面新增20000個字元 startTime = System.currentTimeMillis(); for(int i = 0;i<20000;i++){ builder.append(String.valueOf(i));} endTime = System.currentTimeMillis(); System.out.println("StringBuilder的執行時間:"+(endTime-startTime)); //往String物件新增20000個字元 startTime = System.currentTimeMillis(); for(int i = 0;i<20000;i++){ text = text + i;} endTime = System.currentTimeMillis(); System.out.println("String的執行時間:"+(endTime-startTime)); }
- 輸出結果
- 得出結論是:操作效率:StringBuilder》StringBuffer》String