字符串变量连接

时间:2016-03-30 06:06:35

标签: java string string-concatenation

我有几行代码如下。在这里,我的问题是哪一个更喜欢?

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()  ;
}

3 个答案:

答案 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。