admin管理员组文章数量:1611521
关于StringBuilder的容量:StringBuilder Capacity
StringBuilder 在创建实例的会给我们一个初始容量
StringBuilder stringBuilder = new StringBuilder();
System.out.println(stringBuilder.capacity());//初始容量为16
//StringBuilder的最大容量
//private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
StringBuilder继承了AbstractStringBuilder,new StringBuilder()会默认调用父类AbstractStringBuilder的构造函数创建一个容量为16的char数组
//StringBuilder源码
public StringBuilder() {
super(16);
}
//AbstractStringBuilder源码
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
当然也可以在创建实例时给指定容量大小
StringBuilder stringBuilder = new StringBuilder(20);//初始容量设置为20
/**
//StringBuilder源码
public StringBuilder(int capacity) {
super(capacity);
}
*/
向StringBuilder实例中追加字符append(),支持追加多种类型
当追加之后的字符串大小大于大于当前容量时,StringBuilder会自动扩容,扩大到当前容量的2倍+2
//AbstractStringBuilder扩容源码
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private int newCapacity(int minCapacity) {
// overflow-conscious code
//扩容
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}
private int hugeCapacity(int minCapacity) {
if (Integer.MAX_VALUE - minCapacity < 0) { // 溢出,抛异常
throw new OutOfMemoryError();
}
return (minCapacity > MAX_ARRAY_SIZE)
? minCapacity : MAX_ARRAY_SIZE;
}
本文标签: 学习笔记容量StringBuilderJavaCapacity
版权声明:本文标题:StringBuilder的容量:StringBuilder Capacity(Java学习笔记) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728620436a1166288.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论