一尘不染

Java为什么有String时使用StringBuilder?

java

我是StringBuilder第一次遇到,很惊讶,因为Java已经具有一个非常强大的String类,可以追加。

为什么要上第二String堂课?

在哪里可以了解更多信息StringBuilder


阅读 570

收藏
2020-03-08

共1个答案

一尘不染

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();

另请注意StringBuffer,除了StringBuilder。区别在于前者具有同步方法。如果将其用作局部变量,请使用StringBuilder。如果碰巧有可能被多个线程访问,请使用StringBuffer(这种情况较为罕见)

2020-03-08