java基础——String、Stringbuilder、stringbuffer的区别(总结)

1、可变与不可变

String的本质是使用字符数组保存字符串:private final char value[];所以String不可变。StringBuilder、StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder类中也是使用字符数组保存字符串:char[] value,所以StringBuilder、StringBuffer可变的。

2、是否多线程安全

AbstractStringBuilder是StringBuilder和StringBuffer的公共父类,定义了一些字符串的基本操作,如:expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁领域或者对调用的方法加了同步锁(synchronized),所以是线程安全的。

而StringBuilder没有对方法加同步锁,所以是非线程安全的。

3、StringBuilder、StringBuffer共同点

StringBuilder、StringBuffer有公共的父类AbstractStringBuilder(抽象类)。

速度快慢:在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页