StringBuffer 和 StringBuilder

当需要对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不会产生新的未使用的对象。在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改的话,推荐使用 StringBuffer。StringBuilder 类和 StringBuffer 类之间的最大不同在于 StringBuilder 的方法不是线程安全的,即不能同步访问。由于 StringBuilder 相较于 StringBuffer 有速度上的优势,所以多数情况下还是建议使用 StringBuilder 类。但是如果应用程序要求线程安全时,则必须使用 StringBuffer 类。

StringBuffer 类的主要方法
方法返回值类型说明
append(String s)StringBuffer将指定的字符串追加到此字符序列中
reverse()StringBuffer将此字符序列用其反转形式取代
delete(int start, int end)StringBuffer删除此序列中下标从 start 开始,到 end 结束的子字符串,包括 start,但不包括 end,即前闭后开区间
insert(int offset, String str)StringBuffer将 str 插入此序列中下标为 offset 的位置
replace(int start, int end, String str)StringBuffer将原字符序列中下标从 start 开始,到 end 结束的子字符串用 str 代替,前闭后开区间
capacity()int获取 StringBuffer 的容量
length()int获取 StringBuffer 的长度
charAt(int index)char返回指定 index 处的 char 值
ensureCapacity(int minimumCapacity)void确保容量至少等于给定的最小值
getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)void将字符序列从 srcBegin 开始,到 srcEnd 结束,复制到 dst 数组中 dstBegin 的位置
indexOf(String str)int返回该字符序列中第一次出现 str 的下标
indexOf(String str, int fromIndex)int返回从该字符序列的 fromIndex 开始,第一次出现 str 的下标
lastIndexOf(String str)int返回指定字符串 str 在字符序列最右边出现的下标
lastIndexOf(String str, int fromIndex)int返回指定字符串 str 在字符序列从 fromIndex 开始最右边出现的下标
setCharAt(int index, char ch)void将字符序列中 index 处的元素设置为 ch
setLength(int newLength)void设置字符序列的长度
substring(int start)String返回一个新的 String,包含当前字符序列从 start 开始的所有字符
substring(int start, int end)String返回一个新的 String,包含当前字符序列从 start 开始到 end 结束的所有字符,前闭后开区间
toString()String返回此序列中数据的字符串表示形式
public class Demo {
    public static void main(String[] args) {

        StringBuffer str = new StringBuffer("abcdefg");
        System.out.println("原始字符串为:" + str);
        // 追加 ABCDEFG 到原始字符串中
        str.append("ABCDEFG");
        System.out.println("追加之后的字符串为:" + str);
        // 在下标为8的位置插入"@#$"
        str.insert(8,"@#$");
        System.out.println("insert:" + str);
        // 删除从下标为8开始,到下标为11结束的子字符串,前闭后开区间,包括8,但不包括11,即删除下标为8、9、10的三个字符
        str.delete(8,11);
        System.out.println("delete:" + str);
        // replace,str 的长度可不等于 要替换的子字符串长度
        str.replace(7,10,"@#$%^&");
        System.out.println("replace:" + str);
        // reverse
        str.reverse();
        System.out.println("reverse:" + str);
    }
}

StringBuffer 类的方法同样适用于 StringBuilder。

StringBuilder 基本上没有特定的使用场景,基本上所有的情况下都可以使用 StringBuilder。

 

String、StringBuffer、StringBuilder 对比
String    StringBuffer    StringBuilder
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可变类,速度更快
不可变    可变   可变
  线程安全    线程不安全
  多线程操作字符串   单线程操作字符串

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值