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

2022-07-06 13:46:33

在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"时是正常的字符串
  • 作者:jwbhcuikai
  • 原文链接:https://blog.csdn.net/jwbhcuikai/article/details/84612508
    更新时间:2022-07-06 13:46:33