2012-04-13 53 views
4

我決不是一個java程序員,所以這可能看起來很基本。Java多行字符串形成

當你想保持你的代碼行簡短時,這些是'更好'。

String str = "First part of a string."; 
str += " Second part of string."; 

String str = "First part of string." + 
" Second part of string." 

我想我的問題是一舉兩得+ =和+做出新的String對象?如果他們這樣做,那麼兩者都不是更好,這只是一個偏好問題。我給出的例子將是現實世界使用的一個很好的例子。我不希望用任何一種方法比較3次連接1000次。

謝謝

+2

我不能說實際的實現,但在我看來,像第二個可以很容易地優化連接,並且只考慮字符串的兩個部分單個文字。 – jpm 2012-04-13 16:16:44

+0

真棒傢伙,謝謝!我是Ruby開發人員,使用<<來連接兩個字符串不會創建新對象,只會修改您添加的對象。所以我想知道Java如何處理類似的問題。 – Luke 2012-04-13 16:23:24

+2

對於一般的字符串構建(當你需要連接大量的字符串時),StringBuilder是一個很好的工具來幫助避免原始連接的開銷。 – jpm 2012-04-13 16:24:55

回答

3

我更喜歡第二種方法。原因在於編譯器可能會在編譯時將連接結果合併爲一個字符串,而第一個方法可能在運行時完成(取決於實際實現情況)。除非您正在執行某些操作,否則這是件小事。數百萬次,但是。

+0

將*在編譯時肯定*結合連接的結果。這是必需的行爲。 – EJP 2018-02-14 06:35:12

0

這裏就是我得到當我編譯然後編譯如下:

public static void main(String[] args) { 
    String str = "First"; 
    str += " Second"; 
    System.out.println(str); 

    String str2 = "First" + " Second"; 
    System.out.println(str2); 
} 

變爲:

public static void main(String args[]) { 
    String s = "First"; 
    s = (new StringBuilder()).append(s).append(" Second").toString(); 
    System.out.println(s); 
    String s1 = "First Second"; 
    System.out.println(s1); 
} 

那麼第二種方法比較好。

0
StringBuilder sb = new StringBuilder(); 
sb.append("First part"); 
sb.append("Second part"); 
System.out.print(sb.toString());