String 对象是恒定不变的,而StringBuilder则是可变的
StringBuilder是.NET提供的动态创建String对象的高效方式,以克服String对象恒定性带来的性能 影响 。
如果只是单一的对一个string对象做少量几次的操作,则用string 对象
如果需要大量的字符拼接时,这时就一定要用StringBulder对象
因为String 对象的恒定性,创建一个字符后,其不会再改变,对于string的操作都会重新 生成一个新副本
而stringBuilder则是针对同一字符对象做处理,只会生成一个对象。
所以在不同情况下要用不同的对象
由于string的不可变性,在拼接的时候,会分配多个对象(内存空间),大量字符串拼接的时候,用StringBuilder进行进行拼接,因为StringBuilder只会new的时候分配一次内存空间,然后就是toString()时候,会分配一次,当然还有一次内存分配,一般用不到,就是StringBuilder默认内存空间不足的时候,StringBuilder默认分配的貌似为2m空间,如果几个字符串拼接,就用string,StringBuilder无法代替string,看场景来使用,各有所长
StringBuilder效率会比较好
String是固定不变的,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,
如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源
StringBuilder是可变的,不用生成中间对象,拼接字符串比较多,或字符串的长度比较长时有较高的效率。
StringBuilder的内存空间不够也要扩容,如果分配的空间远远大于需要量,也很浪费
所以,初始化StringBuilder的时候最好根据需要设置容量,避免浪费
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String。