Java 使用concat运算符(+;)或String.format()方法进行字符串连接

Java 使用concat运算符(+;)或String.format()方法进行字符串连接,java,string-formatting,string-concatenation,concat,Java,String Formatting,String Concatenation,Concat,哪一个更好地用于字符串的串联 如果我想从一堆字符串变量(比如str1和str2)构建一个字符串, 哪一个更好 字符串Concat运算符 String str=“这是String1”+str1+“与Sting2”+str2合并的字符串 字符串格式方法 String str=String.format(“这是String1%s与Sting2%s合并的字符串”,str1,str2) 我认为第二个会更好,因为第一个会受到很多线的影响 如果我错了,请纠正我?并在相同的上提供反馈,第一个实际上不会创建任何额

哪一个更好地用于字符串的串联

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

  • 字符串Concat运算符
  • String str=“这是String1”+str1+“与Sting2”+str2合并的字符串

  • 字符串格式方法
  • String str=String.format(“这是String1%s与Sting2%s合并的字符串”,str1,str2)

    我认为第二个会更好,因为第一个会受到很多线的影响


    如果我错了,请纠正我?并在相同的

    上提供反馈,第一个实际上不会创建任何额外的字符串。它将被编译成如下内容:

    String str = new StringBuilder("This the String1 ")
        .append(str1)
        .append(" merged with Sting2 ")
        .append(str2)
        .toString();
    
    考虑到第二个表单需要解析格式字符串,如果第一个表单实际运行得更快,我也不会感到惊讶


    然而,除非您有基准测试来证明这确实是一段对您来说运行速度太慢的代码,否则您不应该太担心效率。你应该更担心可读性。您认为哪种代码更可读?

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


    如果您确实需要此优化,请针对您的特定情况进行测量。

    第一种方法不会因创建字符串而受到影响。由于所有内容都是静态的,因此创建一个StringBuilder,附加所有部分,然后调用toString。它将比第二个更有效,后者必须解析格式字符串。但这可能不是您将失去或获得很多性能的地方

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

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

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

    以下链接可能会对您有所帮助


  • 是的,尽量避免过早的优化!哇!了解了连接运算符到StringBuilder的实际编译。从可读性的角度来看,显然第一个看起来更像一个可能的复制品