Java基础类库之StringBuffer类

导语

很多新手都搞不懂String、StringBuffer、StringBuilder之间到底有什么区别,那就一点一点来说一下吧。

主要内容

  • StringBuffer类的主要特点
  • StringBuffer、StringBuilder、String的区别

具体内容

String类

String类的特点:
- String类对象有两种实例化方式:
- 直接赋值:只开辟一块堆内存空间,可以自动入池。
- 构造方法:开辟两块堆内存空间,不会自动入池,使用intern()手工入池。
- 任何一个字符串都是String类的匿名对象。
- 字符串一旦声明则不可改变,可以改变的只是String类对象的引用。

虽然在所有的项目里面,String类都一定要使用,可是String类有一个问题不得不进行重复,那么就是String类的内容不可改变。为此在Java里面提供有另一个类——StringBuffer类(内容可修改)。

StringBuffer类

String类的对象可以使用“+”进行字符串的连接操作,但是在StringBuffer类里面必须使用append()方法进行追加:
- public StringBuffer append(数据类型 变量)

范例:观察StringBuffer基本使用

public class TestDemo {
    public static void main(String args[]) {
        // String类可以直接赋值实例化,但是StringBuffer类不行
        StringBuffer buf = new StringBuffer();
        buf.append("Hello ").append("World ").append("!!!");
        change(buf);  // 引用传递
        System.out.println(buf);
    }
    public static void change(StringBuffer temp) {
        temp.append("\n").append("Hello MLDN .");
    }
}

输出结果

Hello World !!!
Hello MLDN .

发现StringBuffer类的内容是可以进行修改的,而String的内容是不可以修改的。

观察两个类的区别:

String类:StringBuffer类:
public final class String extends Object implements Serializable, Comparable, CharSequence{}public final class StringBuffer extends Object implements Serializable, CharSequence{}

发现String与StringBuffer都是CharSequence接口的子类。而在以后的开发之中,如果看到某些方法出现的是CharSequence接口,那么应该清楚,只需要传递字符串即可。

CharSequence seq = "Hello";  // 向上转型
System.out.println(seq);  // String类覆写的toString()

虽然String和StringBuffer类有着共同的接口,但是这两个类对象之间如果要转换不能够直接转换。
- 将String对象转换为StringBuffer对象:
- 方法一:利用StringBuffer类的构造方法(public StringBuffer(String str))。
- 方法二:利用append()方法(public StringBuffer append(String str))。
- 将StringBuffer对象转换为String对象:
- 利用toString()方法可以将StringBuffer转换为String。
- 也可以利用String类的构造方法转换(public String(StringBuffer buffer)。

在String类里面也提供有与StringBuffer比较的方法:public boolean contentEquals(StringBuffer sb)。

StringBuffer buf = new StringBuffer("Hello");
System.out.println("hello".contentEquals(buf));
System.out.println("Hello".contentEquals(buf));

输出结果

false
true

String类之中定义了许多的方法便于用户的开发,而在StringBuffer类里面也定义了许多的操作方法,而且部分方法与String类是正好互补的。
- 字符串反转:public StringBuffer reverse()。
- 在指定的索引位置增加数据:public StringBuffer insert(int offset, 数据类型 变量)。
- 删除部分数据:public StringBuffer delete(int start, int end)。

StringBuffer buf1 = new StringBuffer("Hello");
System.out.println(buf.reverse());
buf.insert(0, "MLDN ").insert(0, "你好 ");

StringBuffer buf2 = new StringBuffer("Hello");
System.out.println(buf);

StringBuffer buf3 = new StringBuffer("Hello World MLDN");
System.out.println(buf.delete(5, 11));

输出结果

olleH
你好 MLDN Hello
Hello MLDN

StringBuffer、StringBuilder、String的区别

从JDK1.5之后增加了一个新的字符串操作类:StringBuilder类,这个类的定义结构如下:

public final class StringBuffer extends Object 
implements Serializable, CharSequence{}

发现StringBuffer类与StringBuilder类在定义上非常的相似,几乎连方法也一样。

查看源代码,发现StringBuffer的方法前都有synchronized关键字。

**面试题:**String、StringBuffer、StringBuilder的区别?
- String的内容一旦声明则不可改变,而StringBuffer与StringBuilder声明的内容可以改变。
- StringBuffer类中提供的方法都是同步方法,属于安全的线程操作,而StringBuilder类中的方法都属于异步方法,属于非线程安全的操作。

在开发之中,如果见到了字符串的应用,一般使用String类,只有在需要字符串频繁修改的时候才会考虑使用到StringBuffer或者是StringBuilder类操作。

总结

String类依然是最常用的字符串描述类,而StringBuffer类由于出现时间较长,所以使用要比StringBuilder多。

进入我的CSDN戳这里(我的博客导航)**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值