?
在JAVA常用类中有StringBuilder与StringBuffer这两个用来处理字符串的类,其中有两个很常用的方法length()和capacity(),发现他们之间还是有一点区别的。
?
?
class="java">StringBuilder sbd = new StringBuilder("abcde"); StringBuilder sbd2 = new StringBuilder(); StringBuffer sbf = new StringBuffer("abcde"); StringBuffer sbf2 = new StringBuffer(); System.out.println(sbd.length()); System.out.println(sbd.capacity()); System.out.println(sbd2.length()); System.out.println(sbd2.capacity()); System.out.println(sbf.length()); System.out.println(sbf.capacity()); System.out.println(sbf2.length()); System.out.println(sbf2.capacity());
?
结果为:
5 21 0 16 5 21 0 16
?
所以,length()代表的是其中内容的长度,capacity()代表的是容器的大小。
?
PS:其中还发现一个小现象
?
StringBuilder sbd = new StringBuilder('a'); System.out.println(sbd.length()); System.out.println(sbd.capacity());
?结果为:
0 97
?如果将'a'换成"a",结果就正常了为:
1 17
?跟到源码中看了一下,发现是调用了不同的构造器
public StringBuilder(int capacity) { super(capacity); } //传'a'时被转换成了int,所以length没有长度,而capacity长度是97 public StringBuilder(String str) { super(str.length() + 16); append(str); } //传"a"时是正常的字符串
?