为了账号安全,请及时绑定邮箱和手机立即绑定

为什么StringBuilder有String?

为什么StringBuilder有String?

慕尼黑5688855 2019-11-25 20:16:54
为什么StringBuilder有String?我刚刚StringBuilder第一次遇到并且感到惊讶,因为Java已经有一个非常强大的String类允许追加。为什么选择String二等?我在哪里可以了解更多信息StringBuilder?
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

String不允许附加。您在a上调用的每个方法都会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();

还需要注意的是有StringBufferStringBuilder。不同之处在于前者具有同步方法。如果将其用作局部变量,请使用StringBuilder。如果它可能被多个线程访问,请使用StringBuffer(这是罕见的)



查看完整回答
反对 回复 2019-11-26
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

这是一个具体的例子,为什么 -


int total = 50000;

String s = ""; 

for (int i = 0; i < total; i++) { s += String.valueOf(i); } 

// 4828ms


StringBuilder sb = new StringBuilder(); 

for (int i = 0; i < total; i++) { sb.append(String.valueOf(i)); } 

// 4ms

正如您所看到的,性能差异很大。



查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信