String、StringBuffer和StringBuilder的区别

String 是java中非常基础并且非常重要的一个类,它提供了对字符串的构造和管理的基本逻辑。String 本身是被 final 修饰的,所以它是不能被继承的。并且它的属性也是被 final 修饰的,所以也正是它的不可变性,导致了它对字符串的拼接、分割等操作都会重新创建一个 String 对象,如果这种操作很多的话,会对系统的性能有很大的影响,所以大家要谨慎使用它。当然也正是由于它的不可变形,也就避免了线程安全问题,这也算是有利也有弊吧。

StringBuffer 它很好的解决了 String 类型由于拼接操作而产生了很多中间对象的问题,我们可以用append方法或者add方法把字符串添加到末尾或者指定位置。但是 StringBuffer 中所有对字符串的操作都是属于线程安全的,也正是由于线程安全就会产生额外的性能开销,所以除非是确认了操作字符串一定是在线程安全下进行,否则不建议使用 StringBuffer 。

StringBuider 其本质上和 StringBuffer 一样,它们最大的区别就是 StringBuilder 不是线程安全的,能有效的减少了开销。绝大部分情况下首选它进行字符串拼接的操作。

StringBuffer 和 StringBuider 其实现底层都是利用了可修改的 char 数组(话说 JDK9 改为了 byte 数组),它们都继承了 AbstractStringBuilder 类, 其里面包含的基本操作区别就在于方法上是否加了 synchronized 关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值