目录
一、StringBuffer类介绍
- StringBuffer类是对String类的增强,它还是lang包中的,即java.lang.StringBuffer类。
- StringBuffer类代表可变的字符串,可以对字符串的内容进行增删。
- StringBuffer类的很多方法都与String类相同,只不过StringBuffer是可变长度的。
- StringBuffer是一个容器。
- StringBuffer是final类,不能被继承。
下面是简单的代码:
package com.hspedu.Wrapper;
public class StringBuffer01 {
public static void main(String[] args) {
//1.StringBuffer 的直接父类是 AbstractStringBuilder
//2.StringBuffer 实现了 Serializable接口,即StringBuffer的对象可以串行化,可以保存到文件or网络传输
//3.父类 AbstractStringBuilder 中有属性 char[] value(不是final的),该value数组用于存放字符串内容
//4.StringBuffer 类是一个final类,不能被继承
//5.因为StringBuffer字符内容是存在char[] value,所以有变化的时候(增加/删除),不用每次都更换地址(即创建新对象),所以效率要高于String
StringBuffer stringBuffer = new StringBuffer();
}
}
二、StringBuffer中的内容存放在哪里?
答:字符串内容存放在父类 AbstractStringBuilder 中的 名为 value 的 char 类型数组中。(注意该数组不是final类型!因此字符串内容是存放在堆中,而非常量池)
二、StringBuffer类的体系图
三、String VS StringBuffer
1、String
String保存的是字符串常量,里面的值不能更改,因此每次String内容的更新,实际上都是更改地址,效率较低。(原因是它的字符串保存在final类型的char数组中)
2、StringBuffer
StringBuffer保存的是字符串变量, 里面的值可以更改,每次StringBuffer的更新其实是更新内容,而不用更新地址(除非空间不够时,才更新地址),效率较高。
四、StringBuffer的构造器
下面用代码演示:
package com.hspedu.Wrapper;
public class StringBuffer01 {
public static void main(String[] args) {
//构造器的使用
//1.创建一个 大小为16的 char[],用于存放字符内容(容量大小是16,是源码里面设定的)
StringBuffer stringBuffer = new StringBuffer();
//2.这种用的很少,就不演示了
StringBuffer stringBuffer = new StringBuffer(CharSequence seq);
//3.通过构造器指定 char[] 大小
StringBuffer stringBuffer1 = new StringBuffer(100);
//4.直接给一个String 创建 StringBuffer,char[] 大小就是str.length() + 16(即大小是把当前传入字符串的长度 + 16)
StringBuffer hello = new StringBuffer("hello");
}
}
五、String和StringBuffer相互转换
package com.hspedu.Wrapper;
public class StringAndStringBuffer {
public static void main(String[] args) {
//String->StringBuffer
String str = "hello Tom";
//方式1 使用构造器
//注意:返回的值才是StringBuffer对象,对str本身没有影响(str仍然还是String类的对象)
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
//StringBuffer->String
StringBuffer stringBuffer2 = new StringBuffer("edu");
//方式1 使用 StringBuffer 类中重写的 toString 方法
String string = stringBuffer2.toString();
//方式2 使用构造器
String string2 = new String(stringBuffer2);
}
}
Tips:
什么是append()方法?
在英文中,append是一个动词,英英解释是:to add sth to the end of a piece of writing.
在Java中,该方法就是将某个字符串加到另一个字符串后面。
StringBuffer stringBuffer = new StringBuffer("我是中国人!"); stringBuffer.append("牛逼!"); sout(stringBuffer);
输出结果就是:我是中国人!牛逼!