String 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。String 串联操作每次都分配内存,而 StringBuilder 串联操作仅当 StringBuilder 对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则 String 类更适合串联操作。这种情况下,编译器甚至会将各个串联操作组合到一个操作中。如果串联任意数量的字符串,则 StringBuilder 对象更适合串联操作;例如,某个循环对用户输入的任意数量的字符串进行串联。
msdn上看到的,没看懂,有人能解释一下不!

解决方案 »

  1.   

    StringBuilder 会减少空间的频繁申请
      

  2.   

    StringBuilder内部维护这一个char数组,可以在构造函数中为char数组指定初始长度,不指定的话好像是32,在进行串联操作时长度超过指定长度时才会进行分配内存
      

  3.   

    主要是串联固定stirng什么意思,就是什么情况下优先选择string
      

  4.   

    重点是什么时候使用string更好那个问题
      

  5.   


    这个问题也快成月经帖了如果字符串不用拼接多次当然是用string如果字符串需要大量的拼接那请使用stringbuilder原因:String类型对象,一旦创建其值,再修改,新值会重新申请内存空间,存在新的内存空间中....      stringbuilder不需要重新申请新的内存空间.
    可以自己实验一下,做个几万次的循环,string和stringbuilder两种各用的时间。
      

  6.   

    这个是面试最常问的,这几天面试几十家经常被问到...呵呵比如String拼接字符串和StringBuilder有什么区别?
    String拼接字符串内部做了什么,怎么解决?
    为什么NET有了String 还要加入StringBuilder?
    String的特点是什么,对于多字符串拼接你会怎么做?
    ....
      

  7.   

    使用String:
    String strResult = str1 + str2 + str3 + str4 + str5;
    --编译器优化使用StringBuilder:
    StringBulider strBuilder = new StringBuilder(str1);
    ...
    strBuilder.Append(str2);
    ...
    strBuilder.Append(str3);
    ...
    strBuilder.Append(str4);
    ...
    strBuilder.Append(str5);
      

  8.   

    貌似是能用一次string.concat完成的用string,就是能在拼接前计算拼接的总大小。未知总大小的用stringbuilder
      

  9.   

    能够计算出总长度的时候,用string编译器会直接分配一个这么大的空间
    而如果用stringbuilder,需要自己手动计算总长度,不然stringbuilder在每次空间满的时候都需要重新分配(貌似是每次翻倍)
      

  10.   

    没搞明白串联指的是什么,估计就是你说的这个。其他的回答我也知道,多次拼接用stringbuilder,但是刚才那一段里说有时候用string挺好,只是好奇那是什么情况,结果就你看了内容,其他人都是看个标题而已