小白学习之路(一):stringbuilder ,stringbuffer,string区别

个人学习记录,如有错误,欢迎大家纠正。


最近在看jdk源码,发现stringbuilder和stringbuffer的方法大多数都类似,且都继承了AbstractStringBuilder类。一时比较混乱,弄不清楚两者区别与联系。于是从网上看了其他人的指导,有自己的理解。


stringbuffer 和stringbuilder都是常用的对字符串操作的类,通过读源码可知,其根本还是对一字符数组进行一系列操作(String类实际上也是如此)。而他们之间的一些区别就是在有些同名的方法如append,方法体都是调用父类AbstractStringBuilder类的append方法,但是在stringbuffer的append方法方法签名有synchronized保留字,意味着每次只有一个线程能进入这个方法执行,因此保证了stringbuffer类的append方法的线程安全性。其他方法也同理。


也就是说stringbuffer类是线程安全的,stringbuilder类是线程不安全的。但是也由于synchronized保留字,这样降低了stringbuffer操作的速度。因此就操作速度而言,stringbuilder>stringbuffer


可以写个简单的小测试例子,生成3个线程对同一个stringbuilder对象进行append操作,线程1执行1000次append("1");线程2执行1000次append("2")线程3执行1000次append("3").....最后得到的stringbuilder对象调用toString()方法,统计里面的1,2,3的个数。理论上应该均为1000个,但由于多线程,而stringbuilder又是线程不安全的,所以结果不是预计的那样,得到的字符串会存在空白符“  ”..这是就是线程不安全造成的结果。。



由stringbuffer和stringbuilder我们很容易想到我们常用的String类,String类有个特点,每次执行String str = "Hello";     str = "World"..实际上每个赋值操作都是新建了一个String 对象,所以可想而知,String类是线程安全的。但是也容易想到,每次赋值都新生成一个对象,这样的速度肯定会大大降低。因此,从速度上来看,StringBuilder>StringBuffer>String

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值