我看了一下随便一个字符串 长度比容量小一个 有什么意义呢?明明有一个长度了还搞一个容量出来 还有一个setlength是什么意思? 长度还能往回缩么?
我看了一下随便一个字符串 长度比容量小一个 有什么意义呢?明明有一个长度了还搞一个容量出来 还有一个setlength是什么意思? 长度还能往回缩么?
容量是初始化可存储的空间 sb应该是8k的缓存大小。
长度是已经存的东西
集合扩容也是基于长度与容量的关系。比如arraylist的默认初始化容量好像是16 但是你存的东西只有2个,所以长度(size)等于2
StringBuilder是使用char[] value;存储数据的
@Override
public int length() {
return count;
}
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
长度表示的是字符的个数,容量表示的是可用于最新插入字符的存储量。
例如:
StringBuilder sb=new StringBuilder();
sb.append("666");
sb.setLength(2);
System.out.println(sb.length());//追加了长度为3的字符串,count=count+3,所以结果为3
System.out.println(sb.capacity());//调用父类构造器super(16);即是new char[16],所以结果16
String s=sb.toString();
System.out.println(s);
public void setLength(int newLength) {
if (newLength < 0)
throw new StringIndexOutOfBoundsException(newLength);
ensureCapacityInternal(newLength);
if (count < newLength) {
Arrays.fill(value, count, newLength, '\0');
}
count = newLength;
}
执行sb.setLength(2);char[]数组内容没有变化,下标0,1,2还是存储6,6,6
就是把count值设置为2而已,下面调用toString();方法重新构造一个String对象,char数组存储6,6
如果设置sb.setLength(4);构造新的String对象,最后一个补上'0'。
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答1.9k 阅读
2 回答773 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
可以看看jdk的说明: