常用String字串拼接的效能比較與分析

2021-08-04 22:26:15 字數 2011 閱讀 8474

平時編寫**的過程中,免不了string字串的拼接,特別是需要拼接sql語句的時候

本人平時用的比較多的方式有

1:string1 + string2

2:stringbuffer

3:string1.concat(string2)

為了放大效能差距

每種方式迴圈十萬次

方式1:

@test

public void testplus()

long te = system.currenttimemillis();

system.out.println("string1+string2:" + (te - ts));

}

控制台輸出結果為:

string1+string2:15160。可見效能及其差,不過用的非常方便。

方式2:

@test

public void teststringbuffer()

sb.tostring();

long te = system.currenttimemillis();

system.out.println("stringbuffer:" + (te - ts));

}

控制台輸出結果為:

stringbuffer:31。效能極強,但是沒有 方式1 好用。

既然有stringbuffer拼接,那麼肯定不能少了 stringbuilder

@test

public void teststringbuilder()

sb.tostring();

long te = system.currenttimemillis();

system.out.println("stringbuilder:" + (te - ts));

}

控制台輸出結果:15。因為是執行緒不安全的,效能優先,所以效能比stringbuffer還要快不少。

方式3:

@test

public void testconcat()

long te = system.currenttimemillis();

system.out.println("string1.concat(string2):" + (te - ts));

}

控制台輸出結果:

string1.concat(string2):6327。效能上比 方式1 好了不少,但還是與 方式2 差距巨大。

總結:

string1 + string2 這種方式的效能最差,但是用起來簡單,可閱讀性也是最高的。

stringbuffer與stringbuilder,效能極強,操作起來沒有上面的方式簡單。

string1.concat(string2)方式效能比不上stringbuffer,易用性比不上 string1 + string2,感覺好雞肋。

分析:

string1 = string1 + string2 底層是stringbuffer實現的

執行一次,除了原來的 string1 和 string2,

還會產生乙個stringbuffer物件,呼叫tostring()後,又產生乙個新的string字串物件。

並沒有產生新的物件,只是在最後呼叫tostring()的時候,產生乙個string物件返回。所以效能極高。

string1.concat(string2)方式

底層原理是將 string1和string2轉換為 兩個 字元陣列,

然後再把兩個字元陣列拼接在一起,拼接完成之後,然後再 new string(新字元陣列,true),建立乙個新的字串物件。

每次呼叫concat()都會新生成乙個string物件。

新生成的物件比 string1 + string2少,所以效能較高,但是與stringbuffer相比,還是差一大截。

String字串拼接陷阱

先看如下程式 對於一般類物件 public class a public class test public static void main string args 再看如下程式 public class test public static void main string args 輸出的結果...

String字串拼接速率

在for迴圈中,比較常用的字串拼接方式包括以下五種方式 string,string.concat apache.commons.lang3.stringutils.join stringbuffer stringbuilder 接下來,依次分析上述五種方式 string,public final s...

String 型別字串儲存和拼接

string str1 hello string str2 he llo string str3 he new string llo str1 str2 true str1 str3 false 這個問題我試著回答一下,同時也是相互學習。string str1 hello stringstr2 he...