与使用两个append()语句相比,在StringBuilder的append()语句中进行串联连接是否会花费不同的执行时间?

时间:2019-01-01 18:15:18

标签: java string append concatenation stringbuilder

我想知道如果程序员在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 个答案:

答案 0 :(得分:3)

从理论上讲,是的,串联版本将花费更长的时间,因为它在幕后创建了一个全新的{ 'cuisine': None, 'id': 465645, },{ 'cuisine': None, 'id': 521693, } ,附加了StringBuilder,附加了s,然后使用了{{1 }}创建一个字符串,以将其传递给您编码的" "。 (这就是编译器的工作。要了解特定于 的情况,您需要测试代表实际代码的a benchmark。毕竟,如果JIT成为热点,它将参与其中。在运行时。)

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


(如果上面的第一段都是字符串文字,例如StringBuilder,则不会为真。)