StringBuffer
的直接父类是 AbstractStringBuilder
StringBuffer
实现Serializable
,即StringBuffer
的对象可以串行化- 在父类中
AbstractStringBuilder
有属性byte[] value
- 该value数组存放字符串内容,没有使用
final
修饰,因此是存放在堆中的,而不是常量池 StringBuffer
是一个final类,不能被继承
String 和 StringBuffer比较
- String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是修改地址,效率较低. private final byte[] value;
- StringBuffer保存的是字符串变量,里面的值可以更改 byte[] value
String和StringBuffer相互转换
public class StringBuffer01 {
public static void main(String[] args) {
String s = "hello";
StringBuffer stringBuffer = new StringBuffer(s);
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1.append(s);
String str = stringBuffer.toString();
String str1 = new String(stringBuffer);
}
}
StringBuffer常用方法
public class StringBuffer02 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("java");
stringBuffer.append(",");
stringBuffer.append("python");
System.out.println(stringBuffer);
stringBuffer.delete(1,3);
System.out.println(stringBuffer);
stringBuffer.replace(2,4,"ll");
System.out.println(stringBuffer);
int indexOf = stringBuffer.indexOf("al");
System.out.println(indexOf);
stringBuffer.insert(2,"va");
System.out.println(stringBuffer);
System.out.println(stringBuffer.length());
}
}
练习
public class StringBuffer03 {
public static void main(String[] args) {
String str = null;
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(str);
System.out.println(stringBuffer.length());
System.out.println(stringBuffer);
StringBuffer stringBuffer1 = new StringBuffer(str);
System.out.println(stringBuffer1);
}
}