在 StringBuilder append() 语句中进行连接是否比使用两个 append() 语句花费不同的执行时间



我想知道如果程序员在 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 + " ");
        }
    }
}

双追加() 示例:

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

理论上,是的,串联版本需要更长的时间,因为在幕后它会创建一个全新的StringBuilder,附加s,附加" ",然后使用toString创建一个字符串(!),以便传递给您编码的append。(这就是编译器所做的。要了解您的具体情况,您需要测试代表实际代码的基准测试。毕竟,如果 JIT 在运行时是热点,它将参与其中。

当然,您可能不会注意到。但是,如果您已经在使用 StringBuilder ,使用它(通过执行两次append)。:-)


(如果它们都是字符串文字,上面的第一段就不是真的,例如 "foo" + "bar" .编译器执行该串联。

最新更新