DotNet中StringBuilder和String的区别

来源:互联网 发布:c一维数组排序算法 编辑:程序博客网 时间:2024/05/29 13:41

StringBuilder和String的区别

简单说String是定长,StringBuilder是定长。(String是.NET  Framework里面的类,小写的string是C#语言中的类,string最终编译时会转化成String

如定义:

     string s1 = "111";string s2 = s1;

上述代码,s1s2的值相同,但是他们不是同一个对象。

     每次使用 System.String 类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。如果对string进行拼接,实际过程是这样:新建一个字符串,进行连接后,最后赋值,因此,如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源。

string str="111"+"222";内存中有三个string(分别为"111","222","111222",.Net垃圾处理机制来自动处理掉“111”,"222"两个资源

相比之下StringBuilder则不同:

StringBuilder对象是动态对象,允许扩充它所封装的字符串中字符的数量。但扩容具体如下:

例如,可以创建 StringBuilder 类的带有字符串“111”(长度为 3)的一个新实例,同时可以指定该对象的最大容量为 10。当修改StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。以下代码示例指定可以将 StringBuilderCustom对象扩充到最大 25 个空白。   

      StringBuilderCustom.Capacity = 25;

可用EnsureCapacity 方法来检查当前 StringBuilder 的容量。如果容量大于传递的值,则不进行任何更改;但是,如果容量小于传递的值,则会更改当前的容量以使其与传递的值匹配。也可以查看或设置 Length 属性。如果将 Length 属性设置为大于Capacity 属性的值,则自动将 Capacity 属性更改为与 Length 属性相同的值。如果将 Length 属性设置为小于当前StringBuilder 对象内的字符串长度的值,则会缩短该字符串。

     关于StringBuilder和String选择:

当我们需要多次的对一个字符串进行多次操作的时候,StringBuilder的效率要 高于string ,反之使用String因为他封装的方法较多,使用方便。


0 0
原创粉丝点击