admin管理员组文章数量:1612099
StringBuffer s1=new StringBuffer(10);
s1.append("1234");
s1.length();//4
s1.capacity();//10
计算 StringBuffer 的length 返回当前长度 ,
查看源码发现length 取值count:
public synchronized int length() {
return count;
}
而count 值是在append方法时赋值的,
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len; // count = str.length() ="1234".length()
return this;
}
计算 StringBuffer 的capacity 返回当前容量,
查看源码发现length 取值value.length:
public synchronized int capacity() {
return value.length;
}
在StringBuffer 初始化时,value = new char[capacity];
在这里是value = new char[10]; value.length = 10;
public StringBuffer(int capacity) {
super(capacity);
}
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
在执行append 时,执行 ensureCapacityInternal(count + len);方法
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
这里
ensureCapacityInternal(count + len)
count 初始值是0;len= str.length() =4 ;
private void ensureCapacityInternal(int minimumCapacity) {
// overflow-conscious code
if (minimumCapacity - value.length > 0)
expandCapacity(minimumCapacity);
}
当 minimumCapacity - value.length 即是4-10<0 ;
不执行执行 expandCapacity(minimumCapacity);
value.length =10;
void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2;
if (newCapacity - minimumCapacity < 0)
newCapacity = minimumCapacity;
if (newCapacity < 0) {
if (minimumCapacity < 0) // overflow
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE;
}
value = Arrays.copyOf(value, newCapacity);
}
通过上述源码,总结来说,对于capacity
StringBuffer s = new StringBuffer(x); x为初始化容量长度
s.append(“Y”); "Y"表示长度为y的字符串
length始终返回当前长度即y;
对于s.capacity():
1.当y<x时,值为x
以下情况,容器容量需要扩展
2.当x<y<2x+2时,值为 2x+2
3.当y>2*x+2时,值为y
本文标签: 方法StringBufferlengthCapacity
版权声明:本文标题:StringBuffer 的length和capacity 方法计算 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728620181a1166253.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论