首页 > 代码库 > StringBuffer类详解(String、StringBuffer、StringBuilder的区别)

StringBuffer类详解(String、StringBuffer、StringBuilder的区别)

StringBuffer类详解

1.类结构:

·        java.lang.Object

·        java.lang.StringBuffer

·        All Implemented Interfaces:

SerializableAppendableCharSequence


public final classStringBuffer

extendsObject

implementsSerializable, CharSequence

2.类概述:

    一个类似于 String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer上的主要操作是appendinsert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append方法始终将这些字符添加到缓冲区的末端;而insert方法则在指定的点添加字符。

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

 

3.构造方法

Public Constructors

 

StringBuffer()

构造一个其中不带字符的字符串缓冲区,其初始容量为 16字符。

 

StringBuffer(int capacity)

构造一个不带字符,但具有指定初始容量的字符串缓冲区。

 

StringBuffer(String string)

构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

 

StringBuffer(CharSequence cs)

构造一个字符串缓冲区,它包含与指定的 CharSequence相同的字符。

4.常用方法:

Public Methods

StringBuffer

append(double d)

  double参数的字符串表示形式追加到此序列。

StringBuffer

append(boolean b)

boolean参数的字符串表示形式追加到序列。

StringBuffer

append(long l)

long参数的字符串表示形式追加到此序列。

StringBuffer

append(float f)

float参数的字符串表示形式追加到此序列。

StringBuffer

append(int i)

int参数的字符串表示形式追加到此序列。

StringBuffer

appendCodePoint(int codePoint)

codePoint参数的字符串表示形式追加到此序列。

int

capacity()

返回当前容量。

StringBuffer

delete(int start, int end)

移除此序列的子字符串中的字符。

StringBuffer

deleteCharAt(int index)

移除此序列指定位置的 char

int

indexOf(String string)

返回第一次出现的指定子字符串在该字符串中的索引。

StringBuffer

insert(int index, int i)

int参数的字符串表示形式插入此序列中。

StringBuffer

insert(int index, double d)

double参数的字符串表示形式插入此序列中。

StringBuffer

insert(int index, long l)

long参数的字符串表示形式插入此序列中。

StringBuffer

insert(int index, Object obj)

Object参数的字符串表示形式插入此字符序列中。

StringBuffer

insert(int index, float f)

float参数的字符串表示形式插入此序列中。

StringBuffer

insert(int index, boolean b)

boolean参数的字符串表示形式插入此序列中。

int

lastIndexOf(String string)

返回最右边出现的指定子字符串在此字符串中的索引。

int

length()

返回长度(字符数)。

StringBuffer

replace(int start, int end, String str)

使用给定 String中的字符替换此序列的子字符串中的字符。

 

5. StringStringBufferStringBuilder的区别

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

StringBuilderStringBuffer类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBufferStringBuilder

一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。

总结

1) 如果要操作少量的数据用String

2) 单线程操作字符串缓冲区下操作大量数据用StringBuilder

3) 多线程操作字符串缓冲区下操作大量数据用StringBuffer

StringBuffer类详解(String、StringBuffer、StringBuilder的区别)