04-StringBuffer 类

  1. StringBuffer 类的主要特点;
  2. StringBuffer、StringBuilder、String 的区别;

1. String 类的特点:

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

2. StringBuffer 类的引出

生产中,字符串的操作往往很多。

因此在 Java 中,有 StringBuffer 类,里面的内容可以修改。

String 类可以使用+进行字符串连接操作。

StringBuffer 类必须使用 append 进行字符串连接。(继续返回 StringBuffer 类对象)

String 类StringBuffer 类
public final class String implements java.io.Serializable, Comparable, CharSequence { }public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence { }

都是 CharSequence 接口的子类。

public class Main {
    public static void main(String[] args) {
        // 向上转型,String是CharSequence接口的子类。
        CharSequence cs = "Hello";
		// 可以输出Hello,调用了String类覆写的toString()方法
        System.out.println(cs);
    }
}

虽然 String 和 StringBuffer 类有共同的接口,但是这两个类不能直接转换

3. 互相转换

1. String -> StringBuffer

  • 利用 StringBuffer 的构造方法。
  • 利用 append 方法。

2. StringBuffer -> String

  • 利用 toString()方法
  • 利用 String 类的构造方法

神奇的发现:

String 类中提供有一个和 StringBuffer 类比较的方法:

public boolean contentEquals(StringBuffer sb) { }

4. StringBuffer 类的操作方法

  1. 字符串反转:
public synchronized StringBuffer reverse() { }
  1. 在指定索引位置增加数据:
public synchronized StringBuffer insert(int index, char[] str, int offset,int len) { }
  1. 删除部分数据:
public synchronized StringBuffer delete(int start, int end) { }

5.StringBuilder 类

JDK1.5 之后增加了一个新的字符串操作类:StringBuilder 类

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

定义结构和 StringBuffer 类是一样的,StringBuffer 的大部分方法都有。

但是 StringBuilder 不使用 synchronized 修饰方法。

面试题:解释 String,StringBuffer,StringBuilder 的区别

  • String 的内容一旦声明不能改变,StringBuilder 和 StringBuffer 可以改变
  • StringBuffer 类中提供的方法都是同步方法,属于安全的线程操作,而 StringBuilder 使用异步的,属于不安全的线程操作

结论:生产过程中,95%使用 String 类,只有需要频繁修改操作的时候才考虑使用 StringBuffer 和 StringBuilder。

String 类依然是最常用的