1. 程式人生 > >java中String字串拼接“+”和StringBuffer的效率對比

java中String字串拼接“+”和StringBuffer的效率對比

1、前言

(1)最近在做資料傳輸時,由於接收的資料量較大,在字串拼接時使用了以前感覺方便的“+”進行字串拼接,最後拼接到最後時間越來越多,導致效率變慢。

2、String拼接

首先來看一下兩個String用“+”號拼接需要的時間

String aa="E0 00 00 00 00 06 10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49";
        String bb="10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49";
        long a1=System.currentTimeMillis();
        for(int i=0;i<50000;i++){
            aa=aa+","+bb;
            if(i%10000==0){
                System.out.println(i+"____"+(System.currentTimeMillis()-a1));
            }
        }
        System.out.println("____"+(System.currentTimeMillis()-a1));

所用時間:

10000____4567
20000____18949
30000____43707
40000____78677

大家可以看到越往後需要的時間越長,而我需要組合10萬條資料,基本上就相當於卡死了。

3、用StringBuffer來代替直接相加

 

   String aa="E0 00 00 00 00 06 10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49";
        String bb="10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 14 00 0A 67 15 00 05 E3 16 FF F9 0D 17 FF F7 49";
        StringBuffer sb = new StringBuffer(aa);
        long a1=System.currentTimeMillis();
        for(int i=0;i<50000;i++){
            sb.append(",").append(bb);
            if(i%10000==0){
                System.out.println(i+"____"+(System.currentTimeMillis()-a1));
            }
        }

所花費的時間:

10000____5
20000____8
30000____14
40000____15

5、總結

看一看到用StringBuffer以後速度提升是非常明顯的。如果用String+的方式,每迴圈一次,就會重新new一個StringBuffer物件,這樣的記憶體消耗完全是不必要的,所以建議使用StringBuffer或者StringBuilder