简述StringBuffer和StringBuilder有什么区别,java stringbuilder和stringbuffer

  简述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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: