StringBuffer,StringBuilder和String 源码解读差别

string

string是常量类,一经声明不可改变,强行赋值实则创建新的一个常量;

创建常量开销大于stringbuffer和stringbuilder;

 

 

 

StringBuffer:

 

继承AbstractStringBuilder,实现序列化和charSequence

重写的方法都带有synchronize关键字,所以stringBuffer是线程安全的;但是synchronize加锁的同时会带来额外开销.在执行上stringbuffer又比stringbuilder慢;

 

stringbuilder:

 

 

虽然只截取了部分重写的方法但是可以看到stringbuilder并没有在线程方面做处理;

同stringbuffer一样继承自AbstractStringBuilder;是serializable和charSequence类的实现类;所以他们的方法是 一样的,实现上

 

 

在new一个stringbuffer和stringbuilder时候都是默认给16个单位的的字节数组

 

再看看父类的append方法

 

 

string类的getchars方法

明显调用了arraycopy方法整个复制过去到value中 ( value是之前的字节数组)

在stringBuffer中这个操作是加了synchronize关键字的,是线程安全的;

 

综上:

  1. 执行速度上:stringbuilder > stringbuffer > string
  2. 线程安全上: StringBuffer是线程安全的,stringbuilder 是非线程安全;
  3. 使用场景:
  • string适合少量字符串操作情况;
  • stringbuilder适合单线程下载 字符缓冲区进行大量操作;
  • stringbuffer 适合多线程下字符缓冲区进行大量操作;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值