2013-10-26 279 views
0

我知道StrinbBuilder很適合連接兩個字符串對象。我想知道,在做這個正在發生的事情:連接兩個字符串

"a" + i + "b"; 

哪個選項是最快和最安全:

1.

int i = 0; 
String a = "a" + i + "b"; 

2.

int i = 0; 
String a = "a".concat(String.valueOf(i)).concat("b"); 

3.

int i = 0; 
String a = String.format("a%db", i); 
+0

「[code]是一個不好的舉動,因爲StringBuilder對象創建了10次「。沒有StringBuilder對象被創建。 StringBuilders是去這裏的路。 – hexafraction

+0

沒有任何替代方法可以完成原始代碼的功能... – NPE

+0

對不起,您不明白這個問題,它根本不是循環代碼。我現在刪除它。 – user2618929

回答

0

它們都不是字符串連接的最佳選擇。不要使用StringBuilder,但正確地使用它,而無需每次都將其丟棄:

StringBuilder a = new StringBuilder("a"); 
for(int i = 0;i<10;i++){ 
    a.append("b"); 
} 

這將不會產生新的字符串每次對象執行此操作。

+0

是的,我知道這一點,但它不是問題。我只是在創建第一個字符串時詢問連接字符串。最快的方法是什麼:String a =「a」+ i +「b」; – user2618929

+1

'+'操作其實是一樣的。所以mb'+'更可取,因爲它更短。 – DaunnC

0

它們都不是很好 - 你仍然在創建一個StringBuilder,然後丟棄它。以下是兩個其他選項:

  • 顯式創建StringBuilder並循環。

    StringBuilder builder = new StringBuilder("a"); 
    for(int i = 0; i < 10; i++) { 
        a.append("b"); 
    } 
    String a = builder.toString(); 
    
  • 利用番石榴的Strings.repeat()方法,並連接結果到StringBuilder

    String a = new StringBuilder("a").append(Strings.repeat("b", 9).toString(); 
    

在性能方面,實在是沒有太多改善 - 在你創建ň字符串某一水平。我們唯一能夠切實改善的是內存開銷。

0

因爲字符串在java中是不可變的,所以每次當您執行一個字符串操作時會產生一個新的字符串對象,如果考慮到內存,您不能使用帶有「+」符號的字符串連接,因爲它會創建多個字符串對象,因爲垃圾收集器運行時不能保證你不知道,所以你應該考慮操作應該是線程安全的,所以在使用stringbuffer和stringbuilder時要小心