java - 有字符串时为什么要使用 StringBuilder?

标签 java string stringbuilder

我第一次遇到 StringBuilder 并感到惊讶,因为 Java 已经有一个非常强大的 String 类允许追加。

为什么要有第二个 String 类?

在哪里可以了解有关 StringBuilder 的更多信息?

最佳答案

String 不允许追加。您在 String 上调用的每个方法都会创建一个新对象并返回它。这是因为 String 是不可变的 - 它不能改变其内部状态。

另一方面,StringBuilder 是可变的。当您调用 append(..) 时,它会更改内部 char 数组,而不是创建一个新的字符串对象。

因此更高效的是:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 500; i ++) {
    sb.append(i);
}

而不是 str += i,它会创建 500 个新的字符串对象。

请注意,在示例中我使用了循环。正如 helios 在评论中指出的那样,编译器会自动将像 String d = a + b + c 这样的表达式转换为像

这样的表达式
String d = new StringBuilder(a).append(b).append(c).toString();

还要注意,除了 StringBuilder 之外还有 StringBuffer。不同的是前者有同步方法。如果将其用作局部变量,请使用 StringBuilder。如果碰巧它可能被多个线程访问,请使用 StringBuffer (这种情况很少见)

关于java - 有字符串时为什么要使用 StringBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234147/

相关文章:

string - 为什么 Error() 优先于 String()

c# - StringBuilder 在 ForEach 循环下不工作

java - 通过 Java TCP 套接字发送任意长的字符串

Java——StringBuilder 使用 String 而不是 StringBuilder

android - 基于具有空值的对象构建字符串

java - 包裹在 Horizo​​ntalScrollView 中的 TabWidget 不会随 ViewPager 一起滚动

java - 我的防病毒软件在我的干净应用程序中检测到 PDM.Rootshell 行为

java - 为什么我的代码不起作用?

java - 如何从文本文件的每一行中拆分出单独的列值?

c - 交换字符串中出现频率最高的两个字母