none
字符的长度和内存容量是什么关系? RRS feed

  • 问题

  • 最后两句产生的容量和长度为52,容量和长度是什么关系?

     StringBuilder sb1 = new StringBuilder();//构造一个空StringBuilder名为sb1
                Console.WriteLine("sb1的初始容量为:-->{0}",sb1.Capacity); //输出sb1的容量
                Console.WriteLine("sb1的初始长度为:-->{0}",sb1.Length);   //输出sb1的长度
                sb1.Append("hello world");//向sb1中添加字符串,构造新字符串
                Console.WriteLine("向sb1中添加后sb1的容量为:-->{0}",sb1.Capacity);
                Console.WriteLine("向sb1中添加sb1的长度为:-->{0}",sb1.Length);
                sb1.Append("hello c# I am very like learning English.");
                Console.WriteLine("再次向sb1中添加后sb1的容量为:-->{0}",sb1.Capacity);
                Console.WriteLine("再次向sb1中添加后sb1的长度为:-->{0}",sb1.Length);
                Console.ReadLine();

    2011年2月24日 6:05

答案

  • 您好,

    Capacity是指为StringBuilder实例(sb1),在内存中预留的空间长度,目的是为了提升性能。

    当用Append不断地添加字符串时,StringBuilder会自行调整这个预留空间。

    通常我会预估这个容量,例如StringBuilder sb1 = new StringBuilder(32);//表示我下面要插入的字符串长度约需要32个字节。如果待插入的字符小于等于32,那么就有很高的性能,如果大于32,那么StringBuilde要再次申请内存空间,性能会稍差。

    而Length是指实际长度,与容量长度无关。只是和性能有关。

    • 已建议为答案 mazhou 2011年2月24日 10:37
    • 已标记为答案 杲大盛 2011年2月26日 2:40
    2011年2月24日 7:41
    版主