在 StringBuilder append() 语句中串联是否与使用两个 append() 语句相比需要不同的执行时间?
Does concatenating in a StringBuilder append() statement take a different amount of execution time than using two append() statements?
我想知道如果程序员在 Stringbuilder append() 语句中连接,或者只使用两个 append 语句而不是一个,执行速度会发生变化。
我问这个问题是为了帮助我弄清楚为什么我们在可以连接的情况下完全使用 StringBuilder class。
连接示例:
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
。 (这就是编译器所做的。要了解您的 具体 情况,您需要测试 a benchmark 代表您的实际代码。毕竟,如果它是运行时的热点。)
当然,您可能不会注意到。但是,如果您已经在使用 StringBuilder
,请使用它(改为执行 append
两次)。 :-)
(上面的第一段 不会 如果它们都是字符串文字,例如 "foo" + "bar"
。编译器会进行连接。)
我想知道如果程序员在 Stringbuilder append() 语句中连接,或者只使用两个 append 语句而不是一个,执行速度会发生变化。
我问这个问题是为了帮助我弄清楚为什么我们在可以连接的情况下完全使用 StringBuilder class。
连接示例:
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
。 (这就是编译器所做的。要了解您的 具体 情况,您需要测试 a benchmark 代表您的实际代码。毕竟,如果它是运行时的热点。)
当然,您可能不会注意到。但是,如果您已经在使用 StringBuilder
,请使用它(改为执行 append
两次)。 :-)
(上面的第一段 不会 如果它们都是字符串文字,例如 "foo" + "bar"
。编译器会进行连接。)