gpt4 book ai didi

java - + 运算符什么时候比 StringBuilder 更快?

转载 作者:行者123 更新时间:2023-12-02 08:07:48 27 4
gpt4 key购买 nike

过去,我一直认为您应该使用 StringBuilderappend(String)当使用变量构建字符串时,而不是 string += split[i] 。在什么情况下这是准确的?我问这个问题是因为通常情况下,如果我要写以下内容:

String[] split = args; // command line arguments or whatever
String myString = "";
for (int i = 0; i < split.length; i++) {
myString += split[i];
}

我的 IDE 告诉我应该将其转换为使用 StringBuilder。然而,写这样的东西:

StringBuilder build = new StringBuilder();
build.append("the ").append(build.toString()).append(" is bad").append(randomvar);
build.toString();

当我应该使用 String 时,IntelliJ 实际上将使用 StringBuilder 列为性能问题。事实上,它被列为性能问题,这表明它实际上可能会导致问题,而不仅仅是速度慢一点。

我确实注意到第一个示例是循环,第二个示例不是 - 是建议用于大量串联的 StringBuilder,但普通串联对于非循环情况更好(这也意味着在循环中运算符 +=会被使用,而在循环之外它可能是 "the " + build.toString() + " is bad" + randomVar - 是 += 问题而不是 +?)

最佳答案

字符串连接在后台转换为对 StringBuilder.append() 的调用。

字符串文字连接被(或至少可以)转换为单独的字符串文字。

您可能在循环内使用了 String 变量(而不仅仅是两个文字),因此 Java 不能仅将其替换为文字;它必须使用 StringBuilder。这就是为什么在循环中进行字符串连接应该使用单个 StringBuilder 来完成,否则 Java 最终会在每次循环迭代时创建另一个 StringBuilder 实例。

另一方面,类似这样的事情:

String animals = "cats " + "dogs " + "lizards ";

将(或可以)用单个 String 文字替换(由 Java,而不是您),因此使用 StringBuilder 实际上会适得其反。

关于java - + 运算符什么时候比 StringBuilder 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492475/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com