一.StringBuffer类的介绍
JDK API文档描述:
线程安全的可变字符序列。一个类似于 String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer
上的主要操作是 append
和 insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append
方法始终将这些字符添加到缓冲区的末端;而 insert
方法则在指定的点添加字符。
我的描述:
StringBuffer的本质是一个可变的字符数组,默认初始容量16个字符,如果大于16个字符,将会在内存中重新申请数组空间,把原有的字符复制到新的数组里,再添加新增的字符。
二.StringBuffer类中的一些方法
package com.xiao.stringbuffer;
import org.junit.Test;
/**
* @Author 笑笑
* @Date 20:42 2018.4.19
*/
public class StringBufferDemo {
//reverse() 将此字符序列用其反转形式取代
@Test
public void test_01(){
StringBuffer s = new StringBuffer();
StringBuffer reverse = s.append(1).append(2).append(3).reverse();
//打印结果为321
System.out.println(reverse);
}
//replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。
//[0,1) 右开区间,不包含给定的第二个索引位置的字符
@Test
public void test_02(){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = s1.append("asd");
StringBuffer s3 = s2.replace(0, 1, "b");
//打印结果为bsd
System.out.println(s3);
}
//delete(int start, int end) 移除此序列的子字符串中的字符。
//[0,1) 右开区间,不包含给定的第二个索引位置的字符
@Test
public void test_03(){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = s1.append("asd");
StringBuffer s3 = s2.delete(0, 1);
//打印结果为sd
System.out.println(s3);
}
//如果StringBuffer对象调用了toString方法,就会把可变的字符缓冲区对象变为不可变的String对象
@Test
public void test_04(){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = s1.append("asd");
String s3 = s2.toString();
}
}
三.StringBuilder类的介绍
JDK API文档描述:
一个可变的字符序列。此类提供一个与 StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。
四.StringBuilder类中的方法
其中的方法与StringBuffer类基本相同,StringBuilder线程不安全,但其执行的速度比StringBuffer快。