StringBuffer类:
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
-
StringBuffer的直接父类是AbstractStringBuilder
-
StringBuffer实现了Serialiazable,即StringBuffer对象可以实现串行化
-
再父类中, AbstractStringBuilder 有属性char[] value,但不是final类
-
该value数组存放的是字符串的内容,因此不是存放在常量池中给,而是存放在堆中
-
StringBuffer是final类,不能被继承
-
因为StringBuffer字符内容存储在char[] value,所以在变化的时候,可以直接更改内容,无需更换地址
String和StringBuffer的区别
-
String保存的是字符串常量,因为String是final类,其中value[]数组是final类型,每次String更新实际上是更改地址,效率较低
-
StringBuffer保存的是字符串变量,里面的值可以更改,value[]数组不是final类型,因此value值指向堆,可以改变直接内容
StringBuffer的三种构造器及其作用
源代码如下
/**
* Constructs a string buffer with no characters in it and an
* initial capacity of 16 characters.
*/
public StringBuffer() {
super(16);//默认构造器会调用父类AbstractStringBuilder的构造器AbstractStringBuilder(int capacity)
,创建一个大小为16的char类型数组
}
/**
* Constructs a string buffer with no characters in it and
* the specified initial capacity.
*
* @param capacity the initial capacity.
* @exception NegativeArraySizeException if the {@code capacity}
* argument is less than {@code 0}.
*/
public StringBuffer(int capacity) {
super(capacity);//调用父类构造器,创建一个大小为capacity的char类型数组
}
/**
* Constructs a string buffer initialized to the contents of the
* specified string. The initial capacity of the string buffer is
* {@code 16} plus the length of the string argument.
*
* @param str the initial contents of the buffer.
*/
public StringBuffer(String str) {
super(str.length() + 16);//创建大小为str.length + 16的char类型数组
append(str);//数组扩容并将str字符串追加到value数组尾部
}
StringBuffer和String类型转换
String s1 = "abc";
StringBuffer stringBuffer = new StringBuffer("abcd");
String -> StringBuffer
方式一:调用构造器
StringBuffer sb = new StringBuffer(s1);
方式二: 通过append方法
StringBuffer sb = new StringBuffer();
sb = sb.append(s1);
StringBuffer -> String
方式一:tostring方法
String s = stringBuffer.toString();
方式二:调用构造器
String s = new String(stringBuffer);