StringBuffer
大约 2 分钟
StringBuffer
一、基本介绍
- java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删
- 很多方法与 String 相同,但 StringBuffer 是可变长度的
- StringBuffer 是一个容器。
二、解读
- StringBuffer 的直接父类是 AbstractStringBuilder
- StringBuffer 实现了 Serializable,即 StringBuffer 的对象可以串行化
- 在父类中 AbstractstringBuilder 有属性 char[] value,不是 final,该 value 数组存放 字符串内容,因此存放在堆中的
- StringBuffer 是一个 final 类,不能被继承
- 因为 StringBuffer 字符内容是存在 char[]value,所有在变化(增加/删除),不用每次都更换地址(即创建新对象)
三、String 对比 StringBuffer
- String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低 //private final char value[];
- StringBuffer 保存的是字符串变量,里面的值可以更改,每次 StringBuffer 的更新实际上可以更新内容,不用更新地址,效率较高//char[] value; // 这个放在堆.
四、StringBuffer 的构造器
StringBuffer()
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符
StringBuffer stringBuffer = new StringBuffer(); StringBuffer stringBuffer1 = new StringBuffer(100);
StringBuffer(CharSequence seq)
public java.lang.StringBuilder(charSequence seg)构造一个字符串缓冲区,它包含与指定的 Charsequence 相同的字符。
StringBuffer(int capacity)
capacity[容量]
构造一个不带字符,但具有指定初始容量的字符串缓冲区。即对 char[]大小进行指定
StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
StringBuffer stringBuffer2 = new StringBuffer("hello");
五、String 和 StringBuffer 相互转换
在开发中,我们经常需要将 String 和 StringBuffer 进行转换,
- String 转 StringBuffer
String s ="hello"; // 1. 使用构造器, 返回的才是 StringBuffer 对象,对 str 本身没有影响 StringBuffer b1 = new StringBuffer(s); // 2. 吏用的是 append 方法 StringBuffer b2 = new StringBuffer(); b2.append(s);
- StringBuffer 转 String
String s ="hello"; StringBuffer b1 = new StringBuffer(s); // 1. 使用 StringBuffer 提供的 toString 方法 String s2 = b1.tostring(); //b1 [StringBuffer] // 2. 使用构造器 String s3 = new String(b1);
六、StringBuffer 常见方法
append
:添加StringBuffer stringBuffer2 = new StringBuffer("hello"); stringBuffer2.append(','); stringBuffer2.append("张三").append(",").append("刘桑"); stringBuffer2.append(',').append(1000).append(true).append(10.5555); stringBuffer2.append("赵明"); System.out.println(stringBuffer2);
delete
:删除StringBuffer stringBuffer2 = new StringBuffer("hello"); stringBuffer2.append(','); stringBuffer2.append("张三").append(",").append("刘桑"); stringBuffer2.append(',').append(1000).append(true).append(10.5555); stringBuffer2.append("赵明"); System.out.println(stringBuffer2); // hello,张三,刘桑,1000true10.5555赵明 stringBuffer2.delete(1, 3); System.out.println(stringBuffer2); // hlo,张三,刘桑,1000true10.5555赵明
- 插入
StringBuffer stringBuffer2 = new StringBuffer("hello"); stringBuffer2.append(','); stringBuffer2.append("张三").append(",").append("刘桑"); stringBuffer2.append(',').append(1000).append(true).append(10.5555); stringBuffer2.append("赵明"); System.out.println(stringBuffer2); // hello,张三,刘桑,1000true10.5555赵明 stringBuffer2.delete(1, 3); System.out.println(stringBuffer2); // hlo,张三,刘桑,1000true10.5555赵明 // 在索引为 9 的位置插入,原来索引为9的内容自动后移 stringBuffer2.insert(9, "XXXXXXX"); System.out.println(stringBuffer2);