StringBuffer和StringBuilder

往期推荐

synchronized如何实现可重入,和Lock区别-优快云博客

Mysql索引失效的几种场景、回表、索引覆盖、索引下推-优快云博客

为何String不可变,String的运算符重载-优快云博客

String.intern()-优快云博客

StringBuffer和StringBuilder

两者都是继承自AbstractStringBuilder,在AbstractStringBuilder中使用了byte[ ]实现(jdk8之前由char[ ]实现),这里的byte[]没有使用final修饰,所以是可变的,StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,线程安全。StringBuilder没加锁,不安全。

StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用,相比StringBuilder性能不高。

字符串拼接

Java 语言本身并不支持运算符重载,“+”和“+=”是专门为 String 类重载过的运算符,也是 Java 中仅有的两个重载过的运算符。

在"abc"+"abc"时,实际是通过StringBuilder 调用 append() 方法实现的,拼接完成之后调用 toString() 得到一个 String 对象 ,但是在循环内使用“+”进行字符串的拼接的话,存在比较明显的缺陷:编译器不会创建单个 StringBuilder 以复用,而是每循环一次就创建过一个 StringBuilder 对象而如果直接使用 StringBuilder 对象进行字符串拼接的话,就不会存在这个问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值