String,StringBuffer,StringBuilder的区别

String,StringBuffer,StringBuilder的区别
在java基础面试时基本都会问到这三者的区别,String 和StringBuffer、StringBuilder的区别主要是String不可变,因此对String进行改变后相当于又形成了一个新的变量,而StringBuffer和StringBuilder则是在原有的变量基础上进行修改。所以在基本运用中,String一般用来定义一个变量,而StringBuffer和StringBuilder用来拼接字符串。
从底层实现源码上来剖析一下这三者的区别:
String
在这里插入图片描述
String是一个用final修饰的char行数组,这说明String是不可变的对象。如果用String去做字符串的拼接,则需要去创建新的对象,而原有对象一直未失去引用,因此无法被jvm进行回收,所以会占用大量内存,在java开发中并不建议这样使用。
StringBuffer,StringBuilder


在这里插入图片描述
StringBuffer和StringBuilder都是继承AbsractStringBuilder,而AbsractStringBuilder定义的char型数组并未用final进行修饰,所以内容是可变的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过代码我们可以看到StringBuilder 与StringBuffer在拼接字符串时,首先判断字符串长度是否足够,从而创建一个新的数组用来封装数据,而原来的对象被放弃引用,等待垃圾回收,从而减少内存的浪费,因此在拼接字符串等操作时,我们通常使用StringBuilder 与StringBuffer。


StringBuffer和StringBuilder的区别
在这里插入图片描述
StringBuffer使用了同步锁,用于多线程,而StringBuilder在单线程中建议使用,从速度上来讲,StringBuilder>StringBuffer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值