我想知道如果程序员在 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"
.编译器执行该串联。