代码之家  ›  专栏  ›  技术社区  ›  LuminousNutria

在StringBuilder append()语句中进行连接所需的执行时间是否与使用两个append()语句所需的执行时间不同?

  •  2
  • LuminousNutria  · 技术社区  · 6 年前

    我想知道,如果程序员在Stringbuilder append()语句中串联,或者只使用两个append语句而不是一个,执行速度会发生变化。

    我问这个问题是为了帮助我弄清楚,当我们可以连接时,为什么要使用StringBuilder类。

    连接示例:

    public class MCVE {
    
        public static void main(String[] args) {
            String[] myArray = {"Some", "stuff", "to", "append", "using", "the",
                    "StringBuilder", "class's", "append()", "method"};
    
            StringBuilder stringBuild = new StringBuilder();
    
            for(String s: myArray) {
                stringBuild.append(s + " ");
            }
    
        }
    }
    

    Double-Append()示例:

    public class MCVE {
    
        public static void main(String[] args) {
            String[] myArray = {"Some", "stuff", "to", "append", "using", "the",
                    "StringBuilder", "class's", "append()", "method"};
    
            StringBuilder stringBuild = new StringBuilder();
    
            for(String s: myArray) {
                stringBuild.append(s);
                stringBuild.append(" ");
            }
    
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   T.J. Crowder    6 年前

    从理论上讲,是的,连接版本需要更长的时间,因为在封面下它会创建一个全新的版本 StringBuilder s ,附录 " " ,然后使用 toString 创建(!)字符串以将其传递给 append 你编码了。(编译器就是这么做的。了解您的 具体的 在这种情况下,你需要进行测试 a benchmark 代表您的实际代码。毕竟,如果JIT在运行时是一个热点,那么它就会参与进来。)

    当然,你可能不会注意到。但是,如果你已经在使用 字符串拼接 ,使用它 追加


    (上文第一段) 不会 如果它们都是字符串文字,则为true,例如。 "foo" + "bar" . 编译器执行该连接。)