04-StringBuffer 类
- StringBuffer 类的主要特点;
- 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 | 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 类的操作方法
- 字符串反转:
public synchronized StringBuffer reverse() { }
- 在指定索引位置增加数据:
public synchronized StringBuffer insert(int index, char[] str, int offset,int len) { }
- 删除部分数据:
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 类依然是最常用的