A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© william_J   /  2014-11-22 20:34  /  6778 人查看  /  35 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个是长度,一个是缓冲区容积
回复 使用道具 举报
一个是长度,一个是缓冲区容积。
回复 使用道具 举报
长度代表的是你实际存储的数据有多少,而容量指系统分配了多大 的空间
回复 使用道具 举报
Capacity属性:获取或设置可包含在当前实例所分配的内存中的最大字符数,当StringBuilder 对象的Length属性值超过Capacity属性的长度时,StringBuilder 对象内部会重新构造一个字符数组。Capacity属性会变为以前的2倍。例如:Capacity属性的默认值为16,当追加字符串的长度超过16时,Capacity属性会扩充为32。如果给Capacity属性设定一个值的话,当追加字符串的长度超过Capacity属性时,Capacity属性会变为所设定值的2倍。当StringBuilder 对象的Length属性超过Capacity的2倍时,不管有没有设置过Capacity属性的值,最终Capacity属性会和Length属性相同。
Length属性:获取或设置当前 StringBuilder 对象的长度
回复 使用道具 举报
通过调用length()方法可以得到当前StringBuffer的长度;而通过调用capacity()方法可以得到总的分配  
  
容量。
回复 使用道具 举报
dingdingdingdingdingdingdingdingdingidngd
回复 使用道具 举报
length()返回容器的字符数长度;capacity()返回缓冲区容量。
回复 使用道具 举报
hi

1、buf.length(); 返回当前StringBuffer的长度。
2、buf.capacity(); 返回当前StringBuffer总的分配容量。

---------------------------------------------------------------------------------------
这里是一个例子:  
//StringBuffer length vs.capacity.  
class StringBufferDemo  
{  
     public static void main(String args[])  
     {  
                                StringBuffer sb = new StringBuffer("Hello");  
   
                                System.out.println("buffer = "+sb);  
                                System.out.println("length = "+sb.length);  
                                System.out.println("capacity = "+sb.capacity);  
     }  
}  
  
下面是这个程序的输出,它说明了StringBuffer如何为另外的处理预留额外的空间:  
buffer = Hello  
length = 5  
capacity = 21  
  
由于sb在创建时由字符串"Hello"初始化,因此它的长度为5。因为给16个附加的字符自动增加了存储空间,因此它的存储容量为21.  
回复 使用道具 举报
本着说什么文字都是无用的,实验见真相,楼猪请看:
  1. /**
  2. * java技术论坛的一道题:StringBuilder的length()与capacity()的区别
  3. * @author 林吉前
  4. *
  5. */
  6. public class TestStringBuilder {

  7.         public static void main(String[] args) {
  8.                 StringBuilder sb=new StringBuilder();
  9.                 sb.append(true);                //四个字符
  10.                 sb.append("aaa");                //三个字符
  11.                 System.out.println(sb.capacity());        //16
  12.                 System.out.println(sb.length());        //7
  13.         }
  14. }
复制代码
回复 使用道具 举报
林吉前 发表于 2015-3-9 18:16
本着说什么文字都是无用的,实验见真相,楼猪请看:

我一共存了7个字符,capacity为16,length为7,楼猪再看:
  1. /**
  2. * java技术论坛的一道题:StringBuilder的length()与capacity()的区别
  3. * @author 林吉前
  4. *
  5. */
  6. public class TestStringBuilder {

  7.         public static void main(String[] args) {
  8.                 StringBuilder sb=new StringBuilder();
  9.                 sb.append(true);                //四个字符
  10.                 sb.append("aaa");                //三个字符
  11.                 sb.append(true);                //四个字符
  12.                 sb.append("aaa");                //三个字符
  13.                 sb.append(true);                //四个字符
  14.                 sb.append("aaa");                //三个字符
  15.                 System.out.println(sb.capacity());        //34
  16.                 System.out.println(sb.length());        //21
  17.         }
  18. }
复制代码
回复 使用道具 举报
本帖最后由 林吉前 于 2016-9-30 17:21 编辑

                        。。。
回复 使用道具 举报
本帖最后由 林吉前 于 2016-9-30 17:24 编辑

。。。。,m、、
回复 使用道具 举报
length():此对象表示的当前字符序列的长度
回复 使用道具 举报
capacity():返回当前容量。容量指可用于最新插入的字符的存储量,超过这一容量就需要再次进行分配
回复 使用道具 举报
length 这个是存储的字符串长度
capacity 这个是当前容量

这样跟你说capacity 相当于一个水杯
length表示这个水杯现在装了多少水
回复 使用道具 举报
length和capacity返回的都是一个int值,初学者往往分不清哪一个才是StringBuffer的字符长度。
从释意上看,length表示长度,capacity表示容量;
对StringBuffer进行append等操作时,首先会进行容量的判断,如果当前容量不足以存储(即capacity小于添加后的总长度)就会生成一个新的capacity保证StringBuffer能够装下你的所有内容(这其实就是对数据进行扩容);length表示StringBuffer中字符的实际长度。
对StringBuffer进行扩容是一个比较消耗资源的操作,特别是当这个buffer比较大时,建议在使用StringBuffer时指定适当的容量。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马