在Java
中,由于String
是不可变的,在拼接较短字符串时,效率较低。每次拼接都会创建一个新的String
对象,这不仅耗时,还浪费内存。使用StringBuffer
可以解决这个问题。StringBuffer
是一个可变的字符序列,与String
相比,修改字符串的效率更高,且保证线程安全。
一、StringBuffer 特点
(1)StringBuffer
继承AbstractStringBuilder
,而AbstractStringBuilder
中有属性char[] value
,不是final
。该value
数组存放字符串内容,引用存放在堆
中。
(2)StringBuffer
是一个final
类,不能被继承。
(3)StringBuffer
实现了Serializable
接口,即StringBuffer
对象可以被序列化并在网络间传输,也可以被保存至文件。
(4)StringBuffer
方法做了互斥处理(存在synchronized
关键字),推荐在多线程情况下使用(效率比String
高)。
二、StringBuffer 使用
(1)构造器的使用
java
// 创建默认大小为16的char[]
StringBuffer buffer0 = new StringBuffer();
// 创建指定大小为100的char[]
StringBuffer buffer1 = new StringBuffer(100);
// 通过String创建StringBuffer
// char[]大小为str.length() + 16
StringBuffer buffer2 = new StringBuffer("hello");
(2)与String
的相互转换
java
// String -> StringBuffer
String str = "hello";
// 方式 1:使用构造器
StringBuffer buffer0 = new StringBuffer(str);
// 方式 2:使用append方法
StringBuffer buffer1 = new StringBuffer();
buffer1 = buffer1.append(str);
java
// StringBuffer -> String
StringBuffer buffer = new StringBuffer("hello");
// 方式 1:使用toString方法
String s0 = buffer.toString();
// 方式 2:使用构造器
String s1 = new String(buffer);
(3)增删改查插
java
StringBuffer buffer = new StringBuffer("hello");
// 增
buffer = buffer.append(',').append(" world!").append(true).append(100).append(1.5);
System.out.println(buffer);
// 删:删除 索引>=start & < end 处字符
buffer.delete(0, 5);
System.out.println(buffer);
// 改:替换 索引>=start & < end 为新字符串
buffer.replace(0, 1, ", ");
System.out.println(buffer);
// 查:查子串在主串第一次出现的索引,若无则返回-1
int indexOf = buffer.indexOf("world");
System.out.println(indexOf);
// 插:指定索引位置插入
buffer.insert(0, "hello");
System.out.println(buffer);