StringBuffer类详解
1.类结构:
· java.lang.Object
· java.lang.StringBuffer
· All
Implemented Interfaces:
Serializable, Appendable, CharSequence
public final class
StringBuffer
extends
Object
implements
Serializable,
CharSequence
2.类概述:
一个类似于 String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer
上的主要操作是append
和insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append
方法始终将这些字符添加到缓冲区的末端;而insert
方法则在指定的点添加字符。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5
开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
3.构造方法
Public Constructors |
|
StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 |
|
StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 |
|
StringBuffer(String string) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 |
|
StringBuffer(CharSequence cs) 构造一个字符串缓冲区,它包含与指定的 |
4.常用方法:
Public Methods |
|
StringBuffer |
append(double d) 将 |
StringBuffer |
append(boolean b) 将 |
StringBuffer |
append(long l) 将 |
StringBuffer |
append(float f) 将 |
StringBuffer |
append(int i) 将 |
StringBuffer |
appendCodePoint(int codePoint) 将 |
int |
capacity() 返回当前容量。 |
StringBuffer |
delete(int start, int end) 移除此序列的子字符串中的字符。 |
StringBuffer |
deleteCharAt(int index) 移除此序列指定位置的 |
int |
indexOf(String string) 返回第一次出现的指定子字符串在该字符串中的索引。 |
StringBuffer |
insert(int index, int i) 将 |
StringBuffer |
insert(int index, double d) 将 |
StringBuffer |
insert(int index, long l) 将 |
StringBuffer |
insert(int index, Object obj) 将 |
StringBuffer |
insert(int index, float f) 将 |
StringBuffer |
insert(int index, boolean b) 将 |
int |
lastIndexOf(String string) 返回最右边出现的指定子字符串在此字符串中的索引。 |
int |
length() 返回长度(字符数)。 |
StringBuffer |
replace(int start, int end, String str)
使用给定 |
5. String、StringBuffer、StringBuilder的区别
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuilder和StringBuffer类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。
总结:
1) 如果要操作少量的数据用String
2) 单线程操作字符串缓冲区下操作大量数据用
StringBuilder
3) 多线程操作字符串缓冲区下操作大量数据用StringBuffer