`
JhonStryker
  • 浏览: 19143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

StringBuilder与StringBuffer中的length()和capacity()方法

    博客分类:
  • JAVA
阅读更多

 

在JAVA常用类中有StringBuilder与StringBuffer这两个用来处理字符串的类,其中有两个很常用的方法length()和capacity(),发现他们之间还是有一点区别的。

 

 

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"时是正常的字符串

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics