浅谈String,StringBuffer,StringBuilder

String,StringBuffer,StringBuilder的区别

三个类的区别

由三个类的源代码可以看出,三者存储字符串都是存储在字符char[]里面

String类源代码:

StringBuffer和StringBuilder的父类源代码:

而String的数组被修饰符final修饰,可见是不可修改的,而StringBuffer和StringBuilder源码提供了大量实用的操作字符串的代码,对字符串增删查改非常方便。

线程是否安全

先说一下什么才能叫做线程安全

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

线程不安全 就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

上面说到的,String是不可变的,可以理解为常量,是安全的(源码中也加了同步锁),这里不做讨论。

StringBuffer源码:

StringBuilder源码:

对比看得出,StringBuffer方法之前都加了synchronized关键字对方法进行了同步,保证了在同一个时间点只有一个方法可以执行该方法。而StringBuilder并不能保证同步,因此,StringBuffer是线程安全的而StringBuilder不是线程安全的。

三者的性能分析

这里先引用一张实际的测试图(引用)

这是测试三者在字符串拼接的情况

很显然,String并不适合定义常需要修改的字符串,StringBuilder和StringBuffer只有微小的差别,个人认为主要是由于synchronized关键字,JVM需要进行判断是否有进程冲突(个人意见)。

综上,若字符串不需要经常修改,用String足矣。若字符串需要随时根据需求而改变时,单线程的情况下可以用StringBuilder来实现,多线程的话还是使用StringBuffer吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值