一、stringBuffer和StringBuilder工作原理
预先在内存中申请一块空间以容纳字符序列,如果预留的空间不够用则进行自动扩容以容纳更多字符序列
二、区别
1、StringBuffer底层是一个char数组,但是该char数组是可变的并且可以自动扩容
2、StringBuffer和StringBuilder默认初始化容量是16
3、创建StringBuffer之前,预测StringBuffer的存储字符数量,然后再创建StringBuffer的时候采用指定初始化容量的方式创建
StringBuffer,为了减少底层数组的拷贝提高效率
4、在执行速度方面的比较:StringBuilder > StringBuffer
5、StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上
操作的,不像String一样创建一些对象进行操作,所以速度就快了。
6、StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证
StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder
而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
StringBuffer和StringBuilder的区别
最新推荐文章于 2023-05-24 09:36:00 发布