StringBuffer,StringBuilder和String 源码解读差别

  • Post author:
  • Post category:其他


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 适合多线程下字符缓冲区进行大量操作;



版权声明:本文为cb905259982原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。