StringBuffer进阶以及常用方法

StringBuffer 类

String类 是在所有项目开发之中一定会使用到的一个功能类,并且这个类拥有如下的特点:

  • 每一个字符串的常量都属于一个 String 类的匿名对象,并且不可更改
  • String 有两个常量池:静态常量池、运行时常量池
  • String 类对象实例化建议使用直接赋值的形式完成,这样可以直接将对象保护在对象池中以下次重用

String 类的弊端:

  • 内容不允许修改

为了解决此问题,专门提供有一个 StringBuffer 类可以实现字符串的内容修改

StringBuffer 并不像 String 类那样拥有两种对象实例化方式,StringBuffer 必须像.普通类对象那样,首先进行对象的实例化,而后才可以调用方法执行处理,而这个时候可以考虑使用 StringBuffer 类中的如下方法:.

  • 构造方法: public StringBuffer();
  • 构造方法: public StringBuffer(String str),接收初始化字符串内容;.
  • 数据追加: public StringBuffer append (数据类型变量),相当于字符串中的“+”操作;

String与StringBuffer对比

范例:观察 String 与 StringBuffer 对比:

String 类对象引用传递

public class StringTest {
    public static void main(String[] args) {
        String str = "我真帅";
        change(str);
        System.out.println(str);
    }

    private static void change(String data) {
        data += ",天下第一帅";
    }
}
// 结果:
我真帅

会发现引用change方法并没有改变str的值

StringBuffer 类对象引用传递:

public class StringTest {
    public static void main(String[] args) {
        String str = "我真帅";
        StringBuffer sb = new StringBuffer(str);
        change(sb);
        System.out.println(sb.toString());
    }

    private static void change(StringBuffer data) {
        data.append(",天下第一帅");
    }
}
// 结果:
我真帅,天下第一帅

大部分情况下不是会出现改变字符串的内容,这种改变指的并不是针对于静态常量池的改变。

分析下列情况

    public static void main(String[] args) {
        String strA = "我真帅,天下第一帅";
        String strB = "我真帅"+",天下第一帅";
        System.out.println(strB == strA);
    }
// 结果:
true

**注:**这个时候的 strB 对象的内容并不算是改变,严格的意义上来讲,对于现在的  strB 当程序编译之后会变为如下的形式:

String strB = "我真帅"+",天下第一帅";
// strB编译后会编程以下形式。
StringBuffer buf = new StringBuffer();
buf.append("我真帅").append(",天下第一帅");

**注:**所有的“+”在编译之后都变为了 StringBuffer 中的 append() 方法,并且在程序之中 StringBuffer 与 String 类对象之间可以直接相互转换:

  • String 类对象变为 StringBuffer 可以依靠 StringBuffer 类的构造方法或者使用append 方法
  • 所有类对象都可以通过 toString() 方法将其变为 String 类型

StringBuffer常用方法

在 StringBuffer 类里面除了可以支持有字符串内容的修改之外,实际上也提供有了一些 String 类所不具备的方法。

插入数据:

        StringBuffer buf = new StringBuffer();
        buf.append("小菜鸡").insert(0, "天下第一帅的我,").insert(8, "我就是");
        System.out.println(buf);
// 结果:
天下第一帅的我,我就是小菜鸡

删除指定范围的数据:

        StringBuffer buf = new StringBuffer("我是一个小菜鸟,来抓我呀");
        buf.delete(7, 13);
        System.out.println(buf);
// 结果:
我是一个小菜鸟

字符串反转:(重要)

        StringBuffer buf = new StringBuffer("我是一个小菜鸟,来抓我呀");
        System.out.println(buf.reverse());
// 结果;
呀我抓来,鸟菜小个一是我

注:实际上与  StringBuffer 类还有一个类似的功能类: StringBuilder 类.这个类是在 JDK1.5 的时候提供的,该类中提供的方法与 StringBuffer 功能相同,最大的区别在于 StringBuffer 类中的方法属于线程安全的,全部使用了 synchronized 关键字进行标注,而 StringBuilder 类属于非线程安全的。

String、StringBuffer、StringBuilder 的区别:

  • String 类是字符串的首选类型,其最大的特点是内容不允许修改;
  • StringBuffer '与 StringBuilder 类的内容允许修改;
  • StringBuffer 是在 JDK 1.0 的时候提供的,属于线程安全的操作,而 StringBuilder 是在 JDK 1.5 之后提供的,不属于线程安全的操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值