我有几行代码如下。在这里,我的问题是哪一个更喜欢?
public static String convertMapToString ( Map < String, String > map )
{
StringBuilder str = new StringBuilder ( 200 ) ;
for ( Entry < String, String > entry : map.entrySet ( ) )
{
str.append ( entry.getKey() + " = " + entry.getValue() ) ;
}
return str.toString() ;
}
或者我应该使用以下内容,因为我怀疑上面的appned语句可能会因 +
操作而再创建两个附加字符串
在每次迭代中。
public static String convertMapToString ( Map < String, String > map )
{
StringBuilder str = new StringBuilder ( 200 ) ;
for ( Entry < String, String > entry : map.entrySet ( ) )
{
str.append (entry.getKey());
str.append (" = ");
str.append (entry.getValue()) ;
}
return str.toString() ;
}
答案 0 :(得分:3)
按照传统观点,对于最佳Strings
连接,您应该更喜欢StringBuilder.append
方法,因此在您的示例中这将是选项2。
请注意,根据language spec,即使您使用"+"
并置,实现也可能会选择将这些优化为StringBuilder.append
,但它会&#39 ; s不保证,所以我建议总是选择选项2,如果最佳执行是您的首要任务。
答案 1 :(得分:1)
为了便于阅读:第一个。
表现:第二个
第二个代码应该生成更少的对象,因此更快,使用更少的内存。 (虽然编译器会尝试优化代码以使用StringBuilders但是,就像@Jas所说:它没有保证)
现在,知道了,在你的情况下,使用你需要的任何东西或你认为更适合的东西。
我通常只在循环中使用StringBuilders,在它们之外添加String。
答案 2 :(得分:0)
版本2是首选,因为版本1会不必要地创建一堆对象,并且执行速度会明显变慢。
字符串连接被编译为创建一个新的StringBuilder,为每个部分调用append,然后调用toString。