不积跬步无以至千里,凡是从小开始,把每一次当作第一次来做,抱着一颗学习,敬畏的心;
不罗嗦,直接干-----这里是以最新的JDK版本为例—虽然现在企业大部分用的是jdk1.8但是不耽误我分析呀…
public class Test {
public static void main(String args[]) {
StringBuilder stringBuilder= new StringBuilder();
stringBuilder.append("abcdef");
System.out.println(stringBuilder);
}
}
代码倒是很简单,我们来看底层StringBuilder都干了些啥;
看构造方法—
以无参构造为例–
public StringBuilder() {
super(16);
}
调用了父类的构造方法,然后传入了一个int类型的参数----
AbstractStringBuilder(int capacity) {
if (COMPACT_STRINGS) {
value = new byte[capacity];
coder = LATIN1;
} else {
value = StringUTF16.newBytesFor(capacity);
coder = UTF16;
}
}
底层是确定编码格式LATIN1还是UTF16,不管什么字节码编码格式他们都做了一个动作,开辟了一个字节数组长度为16
所以第一行代码所开展的操作如下图所示–
接下来StringBuilder对象调用append方法
public StringBuilder append(