String、StringBuffer和StringBuilder区别

本文详细比较了Java中的String、StringBuilder和StringBuffer在可变性、线程安全、性能及存储方面的特点,指出String不可变且线程安全但性能低,StringBuilder适合单线程频繁拼接,而StringBuffer则在多线程环境中更安全但性能略逊于StringBuilder。
摘要由CSDN通过智能技术生成

String、StringBuffer和StringBuilder区别

说区别之前先说下final。final是java中的修饰符,可以修饰类、方法和变量。
final修饰的类不可以被继承,final类中所有的成员方法都会隐式的定义为final方法。
final修饰的方法不能被重写。
final 修饰的变量即成为常量,只能赋值一次,但是 final 所修饰局部变量和成员变量有所不同。
final 修饰的局部变量必须使用之前被赋值一次才能使用。
final 修饰的成员变量在声明时没有赋值的叫“空白 final 变量”。空白 final 变量必须在构造方法或静态代码块中初始化。

好了,现在言归正传。String、StringBuilder、StringBuffer三者的区别可以从四个方面来回答

1.可变性

String类中有一个byte[ ] 数组,这个byte[ ]数组采用了final修饰,因为数组一旦创建长度不可变。并且被final修饰的引用一但指向某个对象之后,不可在指向其他对象,所以String是不可变的!

StringBuffer和StringBuilder内部实际上是一个byte[ ]数组,这个byte[ ]数组没有被final修饰。StringBuffer、StringBuilder的初始化容量是16当存满之后会进行扩容,底层调用了数组拷贝的方法System.arraycopy() 扩容的。所以StringBuffer、StringBuilder适合用于字符串的频繁拼接操作。

2.线程安全性

String是不可变的所以是线程安全的,StringBuffer被synchronized修饰所以也是线程安全的,StringBuilder在多线程下是不安全的。
所以多线程字符串的频繁拼接用StringBuffer,单线程频频繁拼接用StringBuilder,单线程极少的对字符串操作可用应String的拼接。

3.性能方面

String每次都需要new一个对象,比较耗资源所以性能最差。StringBuffer性能高于String,因为他的可变性不需要额外创建新的对象。性能最好的是StringBuilder,因为StringBuffer有同步锁,同步锁会对性能产生产生影响。

4.存储方面

String存储在常量池中,StringBuffer和StringBuilder存储在堆内存上因为他们都是被new出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值