String concatenation使用concat运算符(+)或String.format()方法

时间:2011-12-14 10:06:19

标签: java string-formatting string-concatenation concat

哪一个更适合串联连接

如果我想从一串字符串变量(如str1和str2)构建一个字符串, 哪一个会更好一个???

  1. String Concat运算符
  2. String str="This the String1 " + str1 + " merged with Sting2 " + str2;

    1. 字符串格式方法
    2. String str=String.format("This the String1 %s merged with Sting2 %s", str1 , str2);

      我认为第二个会更好,因为第一个会受到很多字符串的影响。

      如果我错了,请纠正我?并提供相同的反馈

4 个答案:

答案 0 :(得分:9)

第一个实际上不会创建任何额外的字符串。它将被编译成类似的东西:

String str = new StringBuilder("This the String1 ")
    .append(str1)
    .append(" merged with Sting2 ")
    .append(str2)
    .toString();

鉴于第二种形式需要解析格式字符串,如果第一种形式实际上运行得更快,我不会感到惊讶。

然而,除非你有基准来证明这确实是一些运行速度太慢的代码,否则你不应该太担心效率。你应该更担心可读性。您觉得哪些代码更具可读性?

答案 1 :(得分:3)

第一个不会受到字符串创建的影响。因为一切都是静态的,所以创建一个StringBuilder,附加所有部分,然后调用toString。它将比第二个更有效,后者必须解析格式字符串。但这可能不是你会失去或获得很多表现的地方。

当您在循环中执行时,字符串连接会创建大量临时对象:

 for (String elem : someList) {
     s += elem;
 }

这将在每次迭代时创建一个StringBuilder和一个String对象。

答案 2 :(得分:1)

这取决于您连接的字符串数量。对于最多5(ish),它可能无关紧要。

如果您确实需要此优化,请

衡量以适应您的特定情况。

答案 3 :(得分:0)