首页
学习
活动
专区
工具
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元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券