2009-12-07 48 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