什么时候编译器不隐式使用 StringBuffer/StringBuilder?

发布于 2024-10-04 06:09:09 字数 106 浏览 3 评论 0原文

我听说编译器(或者是 JVM?)会自动使用 StringBuilder 进行某些字符串连接。什么时候是明确声明的合适时间?我不需要 StringBuffer 来保证线程安全。

谢谢。

I've heard that the compiler (or was it the JVM?) will automatically use a StringBuilder for some string concatenation. When is the right time to explicitly declare one? I don't need a StringBuffer for being thread-safe.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

↙厌世 2024-10-11 06:09:09

编译器将自动使用它来进行任何使用“+”的字符串连接。

如果您想在循环中连接,通常会显式使用它。例如:

StringBuilder builder = new StringBuilder();
for (String name : names)
{
    builder.append(name);
    builder.append(", ");
}
if (builder.length() > 0)
{
    builder.setLength(builder.length() - 2);
}
System.out.println("Names: " + builder);

另一种情况是您想要通过多种方法构建字符串,或者可能条件化构建的某些部分。基本上,如果您不是在单个语句中构建字符串(编译器可以帮助您),您至少应该考虑使用 StringBuilder

The compiler will use it automatically for any string concatenation using "+".

You'd usually use it explicitly if you wanted to concatenate in a loop. For example:

StringBuilder builder = new StringBuilder();
for (String name : names)
{
    builder.append(name);
    builder.append(", ");
}
if (builder.length() > 0)
{
    builder.setLength(builder.length() - 2);
}
System.out.println("Names: " + builder);

Another situation would be where you wanted to build up a string over multiple methods, or possibly conditionalise some bits of the building. Basically, if you're not building the string in a single statement (where the compiler can help you) you should at least consider using StringBuilder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文