java - 在 StringBuilderappend() 语句中连接所花费的执行时间是否与使用两个append() 语句不同?

标签 java string append concatenation stringbuilder

我想知道如果程序员在 Stringbuilderappend() 语句中连接,或者只使用两个 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(" ");
        }

    }
}

最佳答案

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

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


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

关于java - 在 StringBuilderappend() 语句中连接所花费的执行时间是否与使用两个append() 语句不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997801/

相关文章:

java - 我需要在 jboss 运行后保留一个值。我需要在tomcat启动之前使用

string - 我可以在不更改项目顺序的情况下将 JSON 字符串转换为 Flex ArrayCollection 吗?

c++ - 文本文件 C++ 编辑第一行

java - Maven 从父级继承 checkstyle

java - Integer.toBinaryString 方法的有符号等效项?

java - Android 7.1 及更低版本显示双通知

java - 关于PermGC中的字符串对象池

java - 基本 Java 扫描

Javascript Append函数,需要构建一个循环

jQuery .each 与 jQuery select追加冲突