我第一次遇到 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/