String , StringBuffer , StringBuilder 之间的区别

在这里插入图片描述

String , StringBuffer , StringBuilder 的区别

String 是Java语言基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的Imutable(不可变类) 被声明成为final class,所有属性也都是final。也由于他的不可变性,类似拼接,裁剪字符串等动作都会产生新的String 对象。

StringBuffer 是为解决上面提到的拼接产生太多中间对象的问题而提供的一个类,用append和add方法来添加字符串。StringBuffer本质上是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来了额外的性能开销,所以除非有线程安全的情况,还是使用StringBuilder,实际上它的线程安全是通过把各种修改数据的方法都加上synchronized 关键字实现的

StringBulider是Java1.5中新增的,在能力上和StringBuffer没有本质区别,但是它去掉了吸纳从安全的部分,有效的减小了开销

StringBuffer 和 StringBuilder底层都是利用可修改的(char,JDK 9 以后是 byte)数组,二者都继承了 AbstractStringBuilder,里面包含了基本操作,区别仅在于最终的方法是否加了 synchronized

字符串设计和实现考量

首先我们要知道String是Immutable(不可变类)的,字符串操作不会产生大量临时变量,以及线程安全的问题。由于String是Immutable的原生的保护了基础线程的安全,因为你无法对内部数据进行任何修改。

StringBuffer实现细节,他的线程安全都是通过各种修改数据都加上synchronized关键字实现的,非常直白。
StringBuffer和StringBuild底层都是利用可修改的数组,二者都继承了AbstractStringBulider,区别在于是否加了synchronized关键字。

-------------本文结束感谢您的阅读-------------
wusha wechat
欢迎您扫一扫上面的微信二维码,加我的微信!
坚持原创技术分享,您的支持将鼓励我继续创作!