String,StringBuffer,StringBuilder之间的区别

一、可变性

  • String使用 final关键字修饰(char或byte)数组,所以 String是不可变的

JDK8采用char数组:private final char value[]
JDK9采用byte数组:private final byte[] value

  • StringBuilder与 StringBuffer都继承自 AbstractStringBuilder父类,在
    AbstractStringBuilder中使用char[]value字符数组保存字符串,但是没有用 final关键字修饰,所以 StringBuilder与 StringBuffer都是可变的;
public final class StringBuffer extends AbstractStringBuilder

public final class StringBuilder extends AbstractStringBuilder

二、性能

  1. 每次对String类型进行修改时,都会生成一个新的String对象,性能和内有 开销都比较大;
  2. StringBuffer和StringBuilder的操作是直接改变字符串对象本身,而不是生成新的对象,所以性能开销小

三、如何选择使用

  • 字符串少量修改:适用 String
  • 单线程频繁修改字符串:适用 StringBuilder
  • 多线程频繁修改字符串:适用 StringBuffer

四、StringBuilder的用法

  • 出现时间

  • StringBuilder 最早出现在JDK1.5,StringBuffer 最早出现在JDK1.0。

  • 性能

  • StringBuilder相比StringBuffer的性能略高(15%~30%),StringBuffer对操作方法加了(synchronize同步锁)牺牲了性能,以时间来换取安全。而StringBuilder则没有没有加锁,从而性能略高于StringBuffer。

  • 用法

StringBuilder对象的创建

1.常规创建

StringBuilder sb = new StringBuilder();

2.在创建时添加初始字符串

StringBuilder sb = new StringBuilder("ABC");

3.在创建时添加初始长度

StringBuilder sb = new StringBuilder(10);
  • > 注意:如果在StringBuilder创建对象时未指定长度,会自动生成一个16位的字符数组

StringBuilder方法

1. append()
作用:追加数据

		StringBuilder sb = new StringBuilder("ABC");
		// 追加
		sb.append("just");

2. insert()
作用:向指定位置插入

		sb.insert(0, "sos"); //插入位置为0,相当于添加至字符串的头部
		sb.insert(5, "H"); //插入位置为5

3.deleteCharAt
作用:删除指定位置的数据

		sb.deleteCharAt(3); //删除下标位置为3的字符

4.delete()
作用:删除指定范围的数据(左闭右开)

		sb.delete(0, 3); //删除0-3之间的所有字符
		sb.delete(3, 7); //删除3-7之间的所有字符

5.toString()
作用:将对象中的数据以字符串的形式返回

		String str = sb.toString();

6.reverse()
作用:数据反转`

		sb.reverse();

以上就是String,StringBuffer,StringBuilder之间的区别,以及StringBuffer,StringBuilder之间的区别和StringBuffer的一些常用方法。如有错误,请多指教

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值