浅谈String、StringBuffer、StringBuilder的区别

在说区别之前,我们得先了解一下String、StringBuffer和StringBuilder的区别:
String(字符串常量):string是对象而不是基本数据类型,是一个final类,不能被继承,是不可变的对象,一旦创建了,就不可以修改他的值
StringBuffer(字符串变量):类似于string的字符串缓冲区,修改的时候不会像string那样重新创建对象,使用append方法修改stringbuffer的值,使用tostring方法转换为字符串,而且可以多线程使用,但是不能通过赋值符号对它进行赋值
StringBBuilder:(字符串变量):StringBuilder是jdk1.5之后用来替换StringBuffer的一个类,大多数时候可以替换StringBuffer,和StringBuffer的区别在于Stringbuilder是一个单线程使用的类,所以比StringBuffer更快,效率更高,线程是不安全的,所以一般是单线程使用,也不能通过赋值符号来赋
那么现在再来说一下他们的区别
String和StringBuffer/StringBuilder的区别:String类型和StringBuffer/StringBuilder的主要性能区别在于String是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常进行字符串链接操作的字符串最好不要使用String,因为每次生成对象都会对系统性能产生影响,而且当内存中无引用对象多了以后,JVM(虚拟机)的GC(垃圾回收)就会开始工作,影响运行速度;
而如果是使用StringBuffer/StringBuilder类的话,结果就不一样了,每次结果都是对StringBuffer/StringBuilder本身进行操作,无需生成新的对象,所以在字符串对象经常改变的情况下,更推荐使用StringBuffer/StringBuilder;
StringBuffer和StringBuilder的区别:StringBuffer线程安全,StringBuilder线程不安全
两者的原理和操作基本相同,区别在于StringBuffer支持并发操作,线程安全,适合多线程使用,而StringBuilder不支持并发操作,线程不安全,不适合多线程使用,但是在单线程中的性能比StringBuffer高
然后再来说一下它的速度:
在速度上,StringBuilder是要快于StringBuffer的,StringBuffer又是快于String的
速度:StringBuilder>StringBuffer>String
综上所述:字符串连接操作较少使用String,字符串连接操作较多,且是多线程操作使用StringBuffer,字符串连接操作较多,但是是单线程操作,使用StringBuilder

你可能感兴趣的:(浅谈String、StringBuffer、StringBuilder的区别)