JAVA中的StringBuffer类和StringBuilder类

StringBuffer

需要进行大量的字符串拼接操作时,建议使用 java.lang.StringBuffer 和 java.lang.StringBuilder

  • 采用+=的方式进行字符串的拼接操作时
    String s1 = “a”;
    s1 += “b”;
    for (int i = 0; i < 100; i++) {
    //因为字符串一旦创建不可修改,所以这样操作会在字符串变量池中创建大量的字符串,
    //每一次拼接产生新字符串,这样会占用大量的方法区内存,造成内存空间的浪费
    s1 += i;
    System.out.println(s1);
    }
  • 调用StringBuffer的无参构造方法,由源码可知,默认创建内存容量为16的byte[ ]数组
    即StringBuffer底层是一个byte[]数组,
    往StringBuffer中放字符串,实际上是放到byte[]数组中了,
StringBuffer stringBuffer = new StringBuffer();   //capacity:内存容量
  • 当byte[ ]数组长度超出了默认长度时,会进行自动扩容,底层调用的是数组拷贝System.arraycopy()方法
    而频繁的对数组进行扩容,会降低程序运行的效率,所以为了确保效率,要在创建对象时赋予合适的内存容量
  • 调用有参构造方法:
    String源码中声明:private final byte[] value;
    StringBuffer源码中声明:byte[ ] value;
    由此可知,因为String方法中的value数组为final修饰,所以不可变
    而StringBuffer中的value数组则没有final修饰
StringBuffer stringBuffer2 = new StringBuffer(20);   //赋予初始内存容量20
  • 可通过String的构造方法将StringBuffer类型转换为String类型
		String s2 = new String(stringBuffer);
        System.out.println(s2);
  • StringBuffer中的常用方法:在这里插入图片描述
//append方法:将指定的字符串追加到此字符序列       append:附加
        //public StringBuffer append(String s)
		stringBuffer.append("b");
        stringBuffer.append(100);
        stringBuffer.append(3.14);
        stringBuffer.append(true);
//运行结果:
b1003.14true
//replace方法: 使用给定 String 中的字符替换此序列的子字符串中的字符。
        //replace(int start, int end, String str)
        stringBuffer.replace(4,8,"圆周率");
        System.out.println(stringBuffer);
//运行结果:
b100圆周率true 
//delete方法:移除此序列的子字符串中的字符
        //public delete(int start, int end)
        stringBuffer.delete(4, 7);
        System.out.println(stringBuffer);
//运行结果:
b100true 

StringBuilder

  • StringBuffer类和StringBuilder类使用上大体没啥区别

  • 区别:
    String 长度大小不可变

    StringBuffer 和 StringBuilder 长度可变

    StringBuffer 线程安全 StringBuilder 线程不安全

    StringBuilder 速度快

  • 在绝大多数情况下都是使用StringBuilder类更好

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值