【发布时间】:2016-03-30 06:06:35
【问题描述】:
我有几行代码如下。在这里我的问题是更喜欢哪一个?
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() ;
}
【问题讨论】:
-
反编译这两个版本,看看编译器对它们做了什么。
-
第二个 sn-p 生成的 String 对象可能比第一个少,所以我更喜欢它。
-
@Tom 同意,我的猜测是第 2 个选项“更好”,因为需要连接字符串,
StringBuilder必须循环相同数量的char.所以选项 1 似乎与选项 2 相同,但多了一个不必要的连接 -
@Tom 我发现这两个版本的反编译代码除了将键和值部分转换为字符串外没有任何变化。你指的是这个还是你想让我意识到其他什么?
-
那么编译后的代码对于两个版本都是一样的,那么你选择什么都没关系。但是看,第一个版本没有编译成
str.append(new StringBuilder(entry.getKey()).append(" = ").append(entry.getValue()).toString());。
标签: java string string-concatenation