文章目录
StringBuffer
-
利用String 进行字符串的拼接,造成的问题:内存空间的浪费
String s = “hello”; //创建hello字符串
s+=“abc” //创建abc 字符串 //创建helloabc字符串 -
进行字符串的拼接工作,采用JDK自带的
java.lang.StringBuffer
java.lang.StringBuilder -
StringBuffer的构造方法 其初始容量为 16 个字符。所以在创建StringBuffer时,尽可能给定一个初始化的容量,减少底层的扩容次数.
-
StringBuffer和StringBuilder区别:synchronized修饰StringBuffer 表示StringBuffer在多线程环境下是安全的;StringBuilder是非线程安全
package Advance.StringBuffer;
import java.util.Arrays;
/**
* @author 衣鱼
* 利用String 进行字符串的拼接,造成的问题:内存空间的浪费
* String s = "hello"; //创建hello字符串
* s+="abc" //创建abc 字符串 //创建helloabc字符串
*
* 进行字符串的拼接工作,采用JDK自带的
* java.lang.StringBuffer
* java.lang.StringBuilder
* StringBuffer的构造方法 其初始容量为 16 个字符。
* 所以在创建StringBuffer时,尽可能给定一个初始化的容量,减少底层的扩容次数
*/
public class StringBufferTest01 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//StringBuffer的构造方法 其初始容量为 16 个字符。
//所以在创建StringBuffer时,尽可能给定一个初始化的容量,减少底层的扩容次数
/*public StringBuffer() {
super(16);
}
*/
/* //父类是16位的char[] 版本不同 有的的byte
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
*/
//追加字符串 使用append()
sb.append("123");
sb.append("adf");
sb.append(true);
sb.append(123);
/* public AbstractStringBuilder append(int i) {
if (i == Integer.MIN_VALUE) {
append("-2147483648");
return this;
}
int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1
: Integer.stringSize(i);
int spaceNeeded = count + appendedLength;
ensureCapacityInternal(spaceNeeded);
Integer.getChars(i, spaceNeeded, value);
count = spaceNeeded;
return this;
}
//append 方法在底层进行追加的时候,如果满了会进行自动扩容
//String的value被final修饰 是不可变的,但是StringBufffer是可以扩容的利用copeOf
/* private void ensureCapacityInternal(int minimumCapacity) {
// overflow-conscious code
if (minimumCapacity - value.length > 0) {
value = Arrays.copyOf(value,
newCapacity(minimumCapacity));
}
}
*/
}
}