简述StringBuffer和StringBuilder有什么区别,java stringbuilder和stringbuffer
首先我们先来谈谈String:
如何解决写爬虫IP受阻的问题?立即使用。
一旦创建了对象,就不能修改其值。如果要修改,会重新打开内存空间存储修改后的对象,也就是修改字符串的引用。
由于String底层使用数组存储值,数组长度不可改变的特性导致了上述问题。
如果我们在实际开发过程中需要频繁修改一个字符串,使用String会浪费内存空间。应该如何解决这个问题?
答案是可以用StringBuffer来解决这个问题。
下面我们就来详细谈谈StringBuffer:
字符串缓冲区类似于字符串。底层也是用数组来存储字符串的值,数组的默认长度是16,是一个空的StringBuffer对。
比如,数组长度是16。实例化StringBuffer对象会创建一个大小为16个字符的stringbuffer区域。
但是当我们调用参数构造函数创建StringBuffer对象时,数组的长度不再是16,而是根据当前对象的值来确定数组的长度。
度,数组的长度是“当前对象的值的长度是16”。
因此,创建StringBuffer后,有16个字符可以修改它的值。如果修改的值范围超过16个字符,将首先检查。
StringBuffer对象的原char数组的容量能否容纳一个新的字符串?如果它不能,char数组将被扩展。
那StringBuffer是怎样进行扩容的呢?
扩展的逻辑是创建一个新的char数组,将现有容量翻倍,再加2。如果不够大,就直接等于所需容量。扩大电信容量
之后将原数组的内容复制到新数组,最后将指针指向新的char数组。
接下来看StringBuffer的兄弟——StringBuilder
StringBuilder和StringBuffer有相同的父类AbstractStringBuilder,它们的接口完全相同,都是实现的。
两个接口,java.io.serializable和charsequence。
那它俩有什么区别呢?
最大的区别是StringBuffer同步了几乎所有的方法,线程更安全,可以保证多线程系统中的数据同步;
然而,StringBuilder不能用于多线程系统,因为它缺乏同步性和不安全的线程。
StringBuffer 和StringBuilder 的使用场景:
需要考虑线程安全时使用StringBuffer,不需要考虑线程安全时需要追求效率时可以使用StringBuilder。这就是Java中String、StringBuffer和StringBuilder的区别和原理的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。