Java 可变字符串(StringBuilder、StringBuffer)

可变字符串

  • String字符串对象是一个常量,在其定义之后值不可被改变。
  • 如果在使用的过程中频繁的进行赋值,n次就要创建n个字符串对象。这样就会花费很多时间和内存空间,从而导致效率低。
  • 这个时候就需要我们使用可变字符串类。

StringBuilder类

StringBuilder:用于表示可变字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率略高于StringBuffer。

StringBuffer类

StringBuffer:用于表示可变字符串的一个类,是线程安全的,建议在多线程环境下使用,效率略低于StringBuilder。

构造方法

构造方法作用
StringBuilder( )默认创建一个大小为16的字符数组
StringBuilder(int num)创建一个指定大小的字符数组
StringBuilder(String str)默认创建一个str长度+16的字符串数组后,将str添加到其中

常用方法

方法作用
append(Object obj)将指定内容添加到原可变字符串对象末尾
delete(int start,int end)删除[start,end)范围内的字符
deleteCharAt(int index)删除指定索引的字符
insert(int index,Object obj)将obj添加到index位置上
replace(int start,int end,String str)将[start,end)范围内的字符替换为str
reverse()反转原字符串

注意事项:

  • 以上方法都是直接操作原字符串,不管使用什么方法,原字符串都会发生改变。
  • StringBuilder和StringBuffer中并没有重写equals方法,所以比较两个可变字符串对象的值是否相同的时候,需要将可变字符串对象转换成String对象后,在使用equals方法进行比较。

可变字符串与不可变字符之间的转换

  • 有些方法如index()、charAt()等,在String和可变字符串StringBuilder和StringBuffer中都存在,可以不用转换。
  • 但是有些方法:getBytes()、contains()、equals()等,只能通过String进行调用,所以需要进行转换后使用。
//创建一个不可变字符串对象
String str = "ABC";
//创建一个可变字符串对象,同时将不可变字符串对象作为参数
StringBuilder sb = new StringBuilder(str)
//这就是不可变字符串转换为可变字符串的过程

//创建一个可变字符串对象
StringBuffer sbf = new  StringBuffer("DEF");
//调用toString()方法将可变字符串对象转换为String类型
String str = sbf.toString();

StringBuilder和StringBuffer的线性安全

  • StringBuilder是非线程安全的
  • StringBuffer是线程安全的,因为其中方法使用synchronized修饰为同步方法,所以在多线程的情景下,使用StringBuffer。

以上就是总结的StringBuilder和StringBuffer的相关知识点,如有不足望指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值