2009-12-07 66 views
1
String today = someSimpleDateFormat.format(new Date()); 
Calendar rightNow = Calendar.getInstance(); 
int hour = rightNow.get(Calendar.HOUR_OF_DAY); 
int minute = rightNow.get(Calendar.MINUTE); 
String hourString = String.valueOf(hour); 
String minuteString = String.valueOf(minute); 

if(hourString.length() == 1){ 
    hourString = '0'.concat(hourString); 
} 

if(minuteString.length() == 1){ 
    minuteString = '0'.concat(minuteString); 
} 

String dayHourMinute = today.concat("_").concat(hourString).concat("_").concat(minuteString);  

我本來可以使用'+'運算符。如果我在程序中有很多字符串連接,並且在'concat'方法上使用'+'運算符,或反之亦然,會不會有任何性能問題?用於字符串連接的'+'運算符的Concat

+1

只是一個*注* char' – 2009-12-07 13:55:55

回答

14

無論哪種方式,你會創造了很多不必要的臨時String S的。強烈建議使用StringBuilder代替。編譯器將實際使用臨時StringBuilder情況下,您使用+運營商,但它不具備你想要什麼,以實現和它多少可以優化StringBuilder使用條款被限制在更廣闊的視野,讓你」我們幾乎總是會把它做得更清楚。

+1

如果你正專注於性能(這是一個代碼常用或鍵區)也將預先分配用於字符串緩衝區(在構造函數中初始容量)的大小,因此緩衝區沒有被調整大小。 – 2009-12-07 12:07:58

+0

Shlemiel畫家又來了! (http://www.joelonsoftware.com/articles/fog0000000319.html) – 2009-12-07 12:17:26

+0

@Jim Rush:的確,這是與更廣泛的上下文一起工作的一部分。 – 2009-12-07 12:34:33

4

我認爲兩者都或多或少等同。但是,如果您擔心性能問題,則應使用StringBuilder來進行字符串連接。

+0

這個等價關係是否有任何度量標準? – Moesio 2013-04-17 18:34:56

4

It doesn't really matter:

是的,你應該避免串 串聯,每 程序員學習的第一年就 工作的東西的明顯 初學者的錯誤。但在那之後,你應該 更擔心你的代碼的可維護性 和可讀性比 性能。這也許是關於讓 自己捲入 微優化劇院 最悲慘的事情 - 它 分散了你從你的真正目的: 編寫更好的代碼。

+0

酷文章。我按照以下規則做出決定: 1.更可讀 - 更好。 2.如果超過8個接觸點 - 總是使用StringBuilder。對我來說更漂亮。這是一首歌曲「嘿!我在*建築*絃樂在這裏」。 – 2009-12-07 12:17:34

+0

這篇文章我最喜歡的引言:「內存分配遠遠沒有免費。」 ...熱鬧:D – sfussenegger 2009-12-07 12:21:35

+0

NoJavaDetectedError ;-) – Hardcoded 2009-12-07 12:43:09

4

如果沒有性能問題,請考慮以下的替代,我覺得這更容易閱讀:在原始類型'不能調用CONCAT(字符串):

String dayHourMinute = 
    String.format("%s_%s_%s", today, hourString, minuteString); 
String evenBetter = 
    String.format("%s_%02d_%02d", today, hourString, minuteString); 
// thanks to hardcoded! 
+3

更妙的是: 的String.format( 「%S_%02d_%02D」,今天,小時,分鐘) – Hardcoded 2009-12-07 12:47:00

+1

甚至有可能: 的String.format( 「%1 $ TY-%1 $ TM-%1 $ TD,%1 $ TH:%1 $以舊換新」,RightNow公司) 更多在http:// java的.sun.com/J2SE/1.5.0 /文檔/ API/JAVA/UTIL/Formattable.html – Kennet 2009-12-07 14:28:41