2013-04-17 37 views
0

我需要一個建議(在java &.net中)以下一段代碼。字符串連接 - 布爾型硬編碼Vs與字符串的布爾串聯

public void method(bool value) 
{ 
    String someString; 

    //some code 

    if (value) 
    { 
      //some code 
      ... 
     someString = "one" + value;    
    } 
    else 
    { 
     //some code 
     ... 
     someString = "two" + value; 
    } 

} 

哪一個是明智的?爲什麼?像上面的代碼或代碼像

someString = "onetrue"; 
someString = "twofalse"; 
+0

似乎是一個公平的編碼問題。 –

+0

我期待更多的方式像字符串連接,字符串不可變,新的字符串對象的創建和性能。 – Nageswaran

+0

除非您給我們一些背景信息,否則我們唯一能做的就是您發佈的示例。我們無法讀懂你的想法。如果您對具體信息感興趣,請提供具體信息,您考慮的用例以及您正在考慮/嘗試的代碼。 –

回答

1

編譯和優化的JDK後,method看起來像:

public static String method(boolean value) { 
    String someString; 

    if (value) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("one"); 
     sb.append(value); 
     someString = sb.toString(); 
    } else { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("two"); 
     sb.append(value); 
     someString = sb.toString(); 
    } 
    return someString; 
} 

如果此代碼調用非常頻繁,它可能帶來的性能影響,相對於第二個版本。在每種情況下,都會構造一個新的StringBuilder,並在其上調用三個方法。在調用append之前,應將布爾值轉換爲對象。而在第二個版本中,我們只是返回常量。一切都取決於這個代碼被調用的頻率。

0

都不會有任何區別它是純粹的風格。

既然你有// some other code我只是堅持第一。如果你在每個分支只有一條線,那麼就可以。

0

在較高的水平,他們都是相同的,但如果你在較低水平往下看,我會建議使用方法:

someString = "onetrue"; 

someString = "twofalse"; 

這是因爲當你做「一」 +值時, value實際上是一個bool,而bool對象的toString()方法將被調用添加到字符串中。基本上只是添加另一個步驟,而不是指定要添加到字符串的內容。