String、StringBuffer和StringBuilder

本文深入探讨了Java中String、StringBuffer与StringBuilder的区别,重点分析了它们的数据可变性、线程安全性及性能差异。揭示了String为何不可变,而StringBuffer和StringBuilder如何实现可变字符串操作,以及在不同场景下选择合适类型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从以下三点来阐述String、StringBuffer和StringBuilder

1.数据的可变性与不可变性
1)String是不可变得,因为它底层使用了一个不可变的数组private final char value[];所以它的内容是不可变得,我们平常看似改变了String的值其实只不过是改变了其引用,是将其引用指向不同的对象而已。
2)StringBuffer和StringBuilder都继承了AbstractStringBuilder,底层使用的是可变的字符数组char[] value;

2.线程的安全性
1)StringBuilder是线程不安全的,StringBuffer是线程安全的。StringBuilder比StringBuffer效率高。
StringBuffer的append方法使用了同步锁(synchronized);StringBuilder则没有。
以下是他们append方法代码:

@Override
public synchronized StringBuffer append(Object obj) {
    toStringCache = null;
    super.append(String.valueOf(obj));
    return this;
}
@Override
public StringBuilder append(String str) {
    super.append(str);
    return this;
}

3.相同点
StringBuffer与StringBuilder都继承自AbstractStringBuilder。
String、StringBuffer和StringBuilder三者操作可变字符串速度快到慢依次是:StringBuilder > StringBuffer > String

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值