黑马程序员技术交流社区

标题: StringBuffer属性 [打印本页]

作者: william_J    时间: 2014-11-22 20:34
标题: StringBuffer属性
StringBuffer类有两个属性分别为 length 和 capacity
请问这两个有什么区别啊?
作者: pillar    时间: 2014-11-22 20:34
length(),返回长度(字符数)。capacity(),返回当前容量。
作者: 逗比程序员    时间: 2014-11-23 00:14
  1. length()和capacity()  
  2.   
  3. 通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配  
  4.   
  5. 容量。它们的一般形式如下:  
  6. int length()  
  7. int capacity()  
  8. 这里是一个例子:  
  9. //StringBuffer length vs.capacity.   
  10. class StringBufferDemo  
  11. {  
  12.      public static void main(String args[])  
  13.      {  
  14. StringBuffer sb = new StringBuffer("Hello");  
  15.    
  16. System.out.println("buffer = "+sb);  
  17. System.out.println("length = "+sb.length);  
  18. System.out.println("capacity = "+sb.capacity);  
  19.      }  
  20. }  
  21.   
  22. 下面是这个程序的输出,它说明了StringBuffer如何为另外的处理预留额外的空间:  
  23. buffer = Hello  
  24. length = 5  
  25. capacity = 21  
  26.   
  27. 由于sb在创建时由字符串"Hello"初始化,因此它的长度为5。因为给16个附加的字符自动增加了存储空间,因此它的存储容量为21.  
复制代码

作者: 逗比程序员    时间: 2014-11-23 00:15
  1. length()和capacity()  
  2.   
  3. 通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配  
  4.   
  5. 容量。它们的一般形式如下:  
  6. int length()  
  7. int capacity()  
  8. 这里是一个例子:  
  9. //StringBuffer length vs.capacity.   
  10. class StringBufferDemo  
  11. {  
  12.      public static void main(String args[])  
  13.      {  
  14. StringBuffer sb = new StringBuffer("Hello");  
  15.    
  16. System.out.println("buffer = "+sb);  
  17. System.out.println("length = "+sb.length);  
  18. System.out.println("capacity = "+sb.capacity);  
  19.      }  
  20. }  
  21.   
  22. 下面是这个程序的输出,它说明了StringBuffer如何为另外的处理预留额外的空间:  
  23. buffer = Hello  
  24. length = 5  
  25. capacity = 21  
  26.   
  27. 由于sb在创建时由字符串"Hello"初始化,因此它的长度为5。因为给16个附加的字符自动增加了存储空间,因此它的存储容量为21.  
复制代码

作者: Memory`_禁    时间: 2014-11-23 14:51
通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配  
  
容量。它们的一般形式如下:  
int length()  
int capacity()  
这里是一个例子:  
//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.  

作者: zbt    时间: 2014-11-23 20:01
length是返回实际的字符长度,而capacity则是返回其字符串的理论长度。一般capacity = length + 16;
作者: yfdsn    时间: 2014-11-24 13:23
capacity是指现在开char[]的容量
length是指已经放入char[]的字符个数
作者: Tae丶Yeon    时间: 2014-11-24 15:30
length()是当前缓冲区的的字符数,capacity()是当前缓冲区的容量
作者: 轩辕邵宇    时间: 2014-11-26 22:16
public int length()  字符个数  实际长度
public  int  capacity  ()字符容量  理论长度(16)
作者: 陌莫    时间: 2014-11-27 09:49
通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配
作者: yuanlingqi    时间: 2014-11-29 11:07
本帖最后由 yuanlingqi 于 2014-11-29 11:12 编辑

看了楼上几个回复没一个是准确的。
length,返回当前已存字符长度没什么疑问。
capacity,方法说明如下:
Returns the current capacity. The capacity is the amount of storage available for newly inserted characters, beyond which an allocation will occur.
Overrides: capacity() in AbstractStringBuilder
Returns:
the current capacity

这段话的意思是capacity返回stringbuffer的当前容量,这个容量为剩余可插入新字符的空间总量,说白了就剩余空间,因为stringbuffer每次初始化都是按一定长度初始化的,这是为了避免空间浪费。当新插入的字符长度超过剩余容量时候,这个stringbuffer就会重新初始化出新的内存来存储。


作者: liqinwyyx    时间: 2014-12-2 15:13
length()是当前缓冲区的的字符数,capacity()是当前缓冲区的容量
作者: 曛丨黯淡浮华    时间: 2014-12-5 21:01
  1. public class StringBufferTest
  2. {
  3.         public static void main(String[] args) {
  4.                
  5.                 StringBuffer sb = new StringBuffer();

  6.                 System.out.println("这表示sb的当前长度:"+sb.length());

  7.                 System.out.println("这表示sb的当前容量"+sb.capacity());

  8.         }
  9. }
复制代码

作者: Andy6163    时间: 2014-12-10 12:44
length()和capacity() 通过调用length()方法可以得到当前StringBuffer的长度。而通过调用capacity()方法可以得到总的分配容量
作者: zrl    时间: 2014-12-10 17:03
capacity是指现在开char[]的容量 length是指已经放入char[]的字符个数 永远length<=capacity
作者: 沙子    时间: 2014-12-12 21:14
length()方法返回的是放入Buffer 的String的长度。capacity()则是返回字符串的理论长度。
作者: 武xiao    时间: 2014-12-12 21:43

length()返回缓冲区长度。capacity(),返回缓冲区容量。
作者: lvwei464892024    时间: 2014-12-13 15:49
capacity是指现在开char[]的容量
length是指已经放入char[]的字符个数
永远length<=capacity
16参考new StringBuffer()
作者: 祁祯祥    时间: 2014-12-14 10:34
length()字符数长度,capacity()分配容量,后者是碗,前者是水
作者: 武汉小菜鸟    时间: 2014-12-17 23:49
打个比方,一个杯子最多能装1升水,1升就是它的容量,现在往杯子里倒入0.5升水,0.5升就是它的长度。那StringBuffer里的capacity()是空间最多可以存储的字符数,超过这一capacity就需要再次进行分配,length()就是当前存放的字符个数。
作者: missyoyo    时间: 2014-12-18 21:22
一个是长度,一个是缓冲区容积
作者: missyoyo    时间: 2014-12-18 21:23
一个是长度,一个是缓冲区容积。
作者: 当我遇上你    时间: 2015-1-7 17:32
长度代表的是你实际存储的数据有多少,而容量指系统分配了多大 的空间
作者: 阿奔    时间: 2015-1-13 15:29
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 对象的长度
作者: 時間_|_的灰    时间: 2015-1-15 23:36
通过调用length()方法可以得到当前StringBuffer的长度;而通过调用capacity()方法可以得到总的分配  
  
容量。
作者: 18942668193    时间: 2015-1-29 21:27
dingdingdingdingdingdingdingdingdingidngd
作者: lintuan712    时间: 2015-3-1 17:03
length()返回容器的字符数长度;capacity()返回缓冲区容量。
作者: xxzlhx    时间: 2015-3-8 11:42
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.  
作者: 林吉前    时间: 2015-3-9 18:16
本着说什么文字都是无用的,实验见真相,楼猪请看:
  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:17
林吉前 发表于 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. }
复制代码

作者: 林吉前    时间: 2015-3-9 18:20
本帖最后由 林吉前 于 2016-9-30 17:21 编辑

                        。。。
作者: 林吉前    时间: 2015-3-9 18:21
本帖最后由 林吉前 于 2016-9-30 17:24 编辑

。。。。,m、、

作者: 花谢花开    时间: 2015-3-31 22:47
length():此对象表示的当前字符序列的长度
作者: 花谢花开    时间: 2015-3-31 22:48
capacity():返回当前容量。容量指可用于最新插入的字符的存储量,超过这一容量就需要再次进行分配
作者: 赵旗    时间: 2015-5-9 09:17
length 这个是存储的字符串长度
capacity 这个是当前容量

这样跟你说capacity 相当于一个水杯
length表示这个水杯现在装了多少水

作者: dawndaybreak    时间: 2015-5-29 07:09
length和capacity返回的都是一个int值,初学者往往分不清哪一个才是StringBuffer的字符长度。
从释意上看,length表示长度,capacity表示容量;
对StringBuffer进行append等操作时,首先会进行容量的判断,如果当前容量不足以存储(即capacity小于添加后的总长度)就会生成一个新的capacity保证StringBuffer能够装下你的所有内容(这其实就是对数据进行扩容);length表示StringBuffer中字符的实际长度。
对StringBuffer进行扩容是一个比较消耗资源的操作,特别是当这个buffer比较大时,建议在使用StringBuffer时指定适当的容量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2