×

stringbuilder和stringbuffer效率?string和stringbuffer和stringbuilder的效率

前端技术网 前端技术网 发表于2023-12-07 18:24:05 浏览3738 评论0

抢沙发发表评论

一、String,StringBuffer和StringBuilder的区别

String是不可变字符序列,即一旦String对象被创建,就不能再对其内容做任何修改。每次对String的操作都会生成新的String对象。因此,当需要对字符串内容进行频繁的修改时,会产生大量的无用String对象,导致系统性能的浪费。

StringBuffer是可变字符序列,即可以对其内容进行修改。它是线程安全的,因为它的所有公共方法都使用了synchronized关键字进行了同步。但是,由于它的所有方法都是同步的,因此在多线程环境下,它的效率会比较低下。

stringbuilder和stringbuffer效率?string和stringbuffer和stringbuilder的效率

StringBuilder也是可变字符序列,和StringBuffer类似,但是它是非线程安全的。它的所有方法都没有使用synchronized关键字进行同步,因此在单线程环境下,它的效率会比StringBuffer更高。因此,当不需要考虑线程安全的情况下,推荐使用StringBuilder。

二、StringBuffer和StringBuilder的区别

区别就是两者意思是不一样具体的不同如下

stringbuffer中文意思是可以存储和操作字符串,即包含多个字符的字符串数据。String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

StringBuilder是一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)

三、stringbuilder默认大小

StringBuilder以及StringBuffer默认大小与扩容

默认值初始化:

stringbuilder和stringbuffer效率?string和stringbuffer和stringbuilder的效率

1.首先明确StringBuffer类与StringBuilder类均继承了抽象类AbstractStringBuilder类

?

无参构造方法

2.源码中StringBuffer类和StringBuilder类初始化均调用父类的构造方法:

?

父类初始化:

?

子类默认传入值16给父类初始化字符数组

有参构造方法:

?

扩容算法:

使用append()方法在字符串后面追加东西的时候,如果长度超过了该字符串存储空间大小了就需要进行扩容:构建新的存储空间更大的字符串,将久的**过去;

再进行字符串append添加的时候,会先计算添加后字符串大小,传入一个方法:ensureCapacityInternal这个方法进行是否扩容的判断,需要扩容就调用expandCapacity方法进行扩容:

四、JAVA中为什么String比StringBuffer的处理效率更高

有两个原因,

1.string是享元模式的,在内存空间中有常量池,可以复用,所以效率高

2.stringbuffer被同步关键字修饰,所有操作都是带锁的,是线程安全的,所以效率差一点

关于stringbuilder和stringbuffer效率的内容到此结束,希望对大家有所帮助。