java(StringBuffer类和StringBuilder类)

StringBuffer

概念:StringBuffer代表可变的字符序列,可以对字符串内容进行增删;很多方法与String相同,但StringBuffer是可变长度的;StringBuffer是一个容器

public class Study {
    public static void main(String[] args) {
        //1.StringBuffer的直接父类是AbstractStringBuilder
        //2.StringBuffer实现了Serializable,即StringBuffer的对象可以串行化
        //3.在父类AbstractStringBuilder有属性char[] value,不是final
        //  该value数组存放字符串内容,存放在堆中
        //4.StringBuffer是一个final类,不能被继承
        StringBuffer stringBuffer = new StringBuffer("hello");
    }
}

String VS StringBuffer

(1)String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低

(2)StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上是更新内容,不用每次更新地址(当空间大小不够的时候会重新开辟空间),效率较高

String和StringBuffer如何相互转换

public class Study {
    public static void main(String[] args) {
        //String-->StringBuffer
        //方式一
        String str="hello";
        StringBuffer stringBuffer1 = new StringBuffer(str);
        //方式二
        StringBuffer stringBuffer2 = new StringBuffer().append(str);
        //StringBuffer-->String
        //方式一
        StringBuffer stringBuffer = new StringBuffer("hello");
        String str1 = stringBuffer.toString();
        //方法二
        String str2 = new String(stringBuffer);
    }
}

StringBuffer类常见方法

(1)增append

(2)删delete(start,end)

(3)改replace(start,end,string)//将start与end之间的内容替换

(4)查indexOf  //查找子串在字符串中第一次出现的索引,如果找不到返回-1

(5)插insert

(6)获取长度length

public class Study {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("hello");
        //append
        stringBuffer.append("123").append(10);
        System.out.println(stringBuffer);
        //delete
        stringBuffer.delete(1,5);
        System.out.println(stringBuffer);
        //replace
        stringBuffer.replace(1,3,"abc");
        System.out.println(stringBuffer);
        //indexOf
        System.out.println(stringBuffer.indexOf("c"));
        //insert
        stringBuffer.insert(1,"ello");
        System.out.println(stringBuffer);
    }
}

StringBuilder类

概念:一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(线程不安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快

在StringBuilder上主要操作是append和insert方法,可重载这些方法,以接收任意类型的数据

public class Study {
    public static void main(String[] args) {
        //1.StringBuilder继承AbstractStringBuilder类
        //2.实现了Serializable,说明StringBuilder对象是可以串行化的(可以进行网络传输)
        //3.StringBuilder是final类,不能被继承
        //4.StringBuilder对象字符序列仍然是存放在其父类AbstractStringBuilder的char[] value
            //因此字符序列是在堆中
        //5.StringBuilder的方法,没有做互斥的处理,即没有synchronized关键字,因此在单线程的情况下使用
        StringBuilder stringBuilder = new StringBuilder();
    }
}

String、StringBuffer和StringBuilder的比较

(1)StringBuilder和StringBuffer非常类似,均可代表可变的字符序列,而且方法也一样

(2)String:不可变字符序列,效率低,但复用率高

(3)StringBuffer:可变字符序列,效率较高,线程安全

(4)StringBuilder:可变字符序列,效率最高,线程不安全

String、StringBuffer和StringBuilder的选择

1、如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder

2、如果字符串存在大量的修改操作,并在单线程的情况下,使用StringBuilder

3、如果字符串存在大量的修改操作,并在多线程的情况下,使用StringBuffer

4、如果字符串很少修改,被多个对象引用,使用String

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值