今天用StringBulider的时候被坑到了,想着它的构造和append方法一样可以传一个int型的变量进去:于是写下了大概这样的代码:
int i= 1;
StringBuilder sb = new StringBuilder(i);
用的在线编译器也没报错就是结果怎么也不对。调了半天才发现如果传入一个int值则代表初始化长度。。。那句话其实应该这样写
StringBuilder sb = new StringBuilder(""+i);
点进它的构造函数发现无参的默认长度是16有参的调用AbstractStringBuilder类的构造。
public StringBuilder(int capacity) {
super(capacity);
}
AbstractStringBuilder该类实现了Appendable, CharSequence接口。
有参的构造其实就是建立了一个长度为capacity的数组
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
最大长度是int的最大值-8
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
观察连接以及扩容方式以String类型为例:
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();