String,StringBuffer,StringBuilder的区别

1)对象的可变与不可变

String对象不可变,StringBuffer和StringBuilder对象可变。

2)线程是否安全

  • String中的对象不可变,String类在java.lang包中,String类是final修饰的,不能被继承,String类对象创建后不能修改,线程安全
  • StringBuffer中的方法大都采用了Synchronized关键字修饰的,线程安全
  • StingBuilder没有对方法进行加同步锁,线程不安全

3)字符串追加速度比较 

StringBuilder > StringBuffer > String

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。为了应对经常性的字符串相关的操作,谷歌引入了两个新的类——StringBuffer类和StringBuild类来对此种变化字符串进行处

小结:(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。

转载自https://blog.csdn.net/weixin_41101173/article/details/79677982

原文地址:https://www.cnblogs.com/lhh666/p/11607192.html