String类与StringBuffer

在Java中,由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。

StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的StringBuffer对象

String类常用方法

StringBuffer append(char c)添加字符到StringBuffer对象中末尾
StringBuffer insert(int offset,String str)在StringBuffer对象中的offset位置插入字符串str
StringBuffer deleteCharAt(int index)移除StringBuffer对象中指定位置的字符
StringBuffer delete(int start,int end)删除StringBuffer对象中指定范围的字符或字符串
StringBuffer replace(int start,int end,String s)将StringBuffer对象中指定范围的字符或字符串用新的字符串s进行替换
void setCharAt(int index, char ch)修改指定位置index处的字符
String toString()返回StringBuffer缓冲区中的字符串对象
StringBuffer reverse()将此StringBuffer对象用其反转形式取代
//反转
    private static void reverse() {
        StringBuffer stringBuffer = new StringBuffer("fsdfasfasd");

        System.out.println(stringBuffer);
        //将StringBuffer的字符串内容反转
        stringBuffer.reverse();
        System.out.println(stringBuffer);
    }

    //删除
    private static void delete() {
        StringBuffer stringBuffer = new StringBuffer("fdsofjasdsfd");

        //删除StringBuffer对象中的指定开始和结束的字符串   指定位置为前包后不包 [2,5)
        stringBuffer.delete(2,5);
        System.out.println(stringBuffer);

        //删除StringBuffer对象中指定位置的字符
        stringBuffer.deleteCharAt(4);
        System.out.println(stringBuffer);

        //清空缓冲区
        stringBuffer.delete(0,stringBuffer.length());
        System.out.println("清空" + stringBuffer);
    }

    //修改
    private static void update() {
        StringBuffer stringBuffer = new StringBuffer("Hello world");

        //将指定位置字符替换
        stringBuffer.setCharAt(4,'c');
        System.out.println(stringBuffer);

        //将指定开始和结束的字符串替换
        stringBuffer.replace(3,6,"asdfg");
        System.out.println(stringBuffer);
    }

    //添加
    private static void add() {
        StringBuffer stringBuffer = new StringBuffer();

        //添加字符串到stringBuffer末尾
        stringBuffer.append("ABC");
        System.out.println(stringBuffer);

        //在StringBuffer指定位置插入字符串
        stringBuffer.insert(2,"fdsf");
        System.out.println(stringBuffer);
    }
String类和StringBuffer类的对比分析:
  • String类定义的字符串是常量,一旦创建后,内容和长度都无法改变StringBuffer表示字符容器,其内容和长度是可以改变的。
  • String类重写了Object类的equals()方法而StringBuffer类没有重写Object类的equals()方法。
private static void test01() {
        //StringBuffer没有重写equals()方法
        String a = new String("abc");
        String b = new String("abc");
        System.out.println(a.equals(b));   //true

        StringBuffer c = new StringBuffer("abc");
        StringBuffer d = new StringBuffer("abc");
        System.out.println(c.equals(d));    //false

        // + 在String和StringBuffer中的区别
        String str1 = new String("a");
        String str2 = new String("b");
        System.out.println(str1 + str2);   //ab

        StringBuffer strb1 = new StringBuffer("a");
        StringBuffer strb2 = new StringBuffer("b");
        //strb1 + strb2 ❌      StringBuffer不能使用 + 连接符

        System.out.println(a == b);  //false
        System.out.println(c == d);  //false
    }

StringBuilder

除了StringBuffer的使用,在JDK1.5之后提供了一个StringBuilder类,同样可以对字符串进行操作。

**主要区别:**二者不同的是StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。通常情况下,如果创建一个内容可变的字符串对象优先考虑StringBuilder。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值