String,StringBuffer,StringBUIder

  1. String :String 表示字符串,是一种引用数据类型,不属于基本数据类型,是不可变类,。

    • String 对象声明后,将不可修改,及字符串“abs”一旦c创建,"abc"无法变成"abcd",也无法变成"ab"。

    • String是不可变对象,如果多个字符串进行拼接,将会形成多个对象,这样会造成内存溢出,会给垃圾回收带来工作量。

  1. StringBuffer:StringBuffer 称为字符串缓冲区,它的工作原理是:预先申请一块内存,存放字符序列,如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。StringBuffer 是可变对象,这个是 String 最大的不同

    所有方法同步,线程安全,但是速度慢

  1. StringBuiIder: 用法同StringBuffer,但是没有方法同步,线程不安全,但是速度快。

三者比较

  • 可变性:String 类中使用 final 关键字字符数组保存字符串,private final char value[] ,所以 String对象是不可变的。StringBuiIder,StringBuffer可变。

  • 线程安全:String,StringBuffer线程安全,Stringbuilder不安全;

  • 效率:String类型改变时,会生成一个新的String对象,然后指针指向一个新的对象,Stringbuffer对象对本身进行操作,而不是生成新的对象。StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

使用总结:

  1. 操作少量数据用String

  2. 单线程,大量数据用StringBuilder

  3. 多线程,大量数据用Stringbuffer

posted @ 2021-03-11 21:59  扣扣M  阅读(139)  评论(0)    收藏  举报