猿问

为什么StringBuilder有String?

为什么StringBuilder有String?

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

为什么选择String二等?

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


慕尼黑5688855
浏览 237回答 3
3回答

慕少森

String不允许附加。您在a上调用的每个方法都会String创建一个新对象并将其返回。这是因为String它是不可变的 - 它不能改变它的内部状态。另一方面StringBuilder是可变的。调用append(..)它时会改变内部char数组,而不是创建新的字符串对象。因此,拥有以下内容更有效:StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;500;&nbsp;i&nbsp;++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;sb.append(i);}而不是str += i,它将创建500个新的字符串对象。请注意,在示例中我使用循环。正如helios在评论中指出的那样,编译器会自动将表达式转换String d = a + b + c为类似的表达式String&nbsp;d&nbsp;=&nbsp;new&nbsp;StringBuilder(a).append(b).append(c).toString();还需要注意的是有StringBuffer除StringBuilder。不同之处在于前者具有同步方法。如果将其用作局部变量,请使用StringBuilder。如果它可能被多个线程访问,请使用StringBuffer(这是罕见的)

Smart猫小萌

这是一个具体的例子,为什么 -int total = 50000;String s = "";&nbsp;for (int i = 0; i < total; i++) { s += String.valueOf(i); }&nbsp;// 4828msStringBuilder sb = new StringBuilder();&nbsp;for (int i = 0; i < total; i++) { sb.append(String.valueOf(i)); }&nbsp;// 4ms正如您所看到的,性能差异很大。
随时随地看视频慕课网APP

相关分类

Java
我要回答