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

 

在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值