学习
实践
活动
专区
工具
TVP
写文章

Java中的String,StringBuilder以及StringBuffer

在Java使用过程中,最常用的类型之一大概就是字符串了,而在Java中,字符串有三种,分别是String, StringBuffer, StringBuilder,很多初级程序猿可能会在使用过程中还分不清这几个类的区别,以致于一股脑的全部使用String,但是实际上,这会对系统的性能造成一定的影响,小编建议大家不要这么做。

因此,今天小编特意查阅相关资料,从各个方面对这几个类进行了对比,方便大家记忆。

线程安全性

String是一个字符串常量,无论是类,还是里面的方法,成员,都是被final修饰,这意味着字符串的内容,长度,一旦创建,是无法进行修改的,因此我们不考虑它

而另外两个中,StringBuilder是线程不安全的,StringBuffer是线程安全的。

这意味着,在多线程场景下,由于StringBuffer的很多方法是添加了synchronized关键字,是可以保证线程安全的,所以在多线程场景下,我们一般使用StringBuffer。

执行速度

StringBuilder > StringBuffer > String

也恰恰是因为StringBuffer的很多方法添加了synchronized关键字,是可以同步访问的,这是以牺牲性能换取的,所以说StringBuilder的速度比StringBuffer快。

那么,为什么说String的速度最慢呢?

正如上文中所说,因为String是字符串常量(被final修饰),而另外两个都是字符串变量

常量对象一旦创建不可修改,而变量创建之后还可以进行修改。

由于不能更改,我们对String的所有操作实际上都包含了以下三个步骤:

1. 创建新对象,名字和原有的String对象一样

2. 在新对象上做出改变。

3. 原对象被垃圾回收掉。

而对StringBuffer和StringBuilder的操作可以直接在原对象上进行修改,省去了创建新对象和回收老对象的过程,因此速度上提高了不少。

适用场景

String: 字符串进行了少量更改,或不进行更改的场景

StringBuffer: 字符串被多个线程进行了大量修改操作的场景

StringBuilder: 字符串被单个线程进行了大量修改操作的场景

小结

String在Java中是一个很重要而且特殊的类,这里描述了它和StringBuffer以及StringBuilder的区别和适用场景,之后还会专门写一章,讲述String类的相关详细内容,欢迎大家持续关注~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180320A0N8BP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券