String与StringBuilder

来源:互联网 发布:绣春刀2影评知乎 编辑:程序博客网 时间:2024/05/16 00:56

前言

  String:表示不可变字符字符串。
  StringBuilder:表示可变字符字符串。

  String类型的值不可改变,每次对其操作都会返回一个新的String对象。
  StringBuilder是一个可变的字符串类,一旦创建类的实例后,可以对其进行添加,修改,替换,删除等操作。

使用String的情况

  1. 程序中对字符串进行的更改的数量很小。这种情况下StringBuilder对系统性能的改善可以忽略不计或者没有改善。
  2. 程序需要执行固定数量字符串串联运算。使用String时,编译器更容易执行。
  3. 需要对正在构建的字符串执行广泛的搜索操作。因为StringBuilder缺少String本身的搜索方法,如:IndexOf和StartWith。你必须将StringBuilder转换为String对象,这样会消除StringBuilder本身的优势。

使用StringBuilder的情况

  1. 在设计时,预料到你的程序会进行未知数目的字符串更改。
  2. 你的程序需要对某个字符串进行已知数量的更改操作,而这种更改数量较大(自行判断)。

StringBuilder的工作原理

  当实例化时未指定其初始容量和最大容量时。默认初始容量为16个字符,最大容量为Int32.MaxValue。如果为一个StringBuilder对象添加字符后超过了16个字符的初始容量,那么这个对象的容量会自动扩展至32个字符,如果32个字符还不够,它就会扩展到64个字符,也就是说它的每一次扩容都是在当前容量的基础上翻倍,至到足够存储添加后的字符串为止(不能大于Int32.MaxValue)。如果在未设置其最大容量时,StringBuilder对象超过Int32.MaxValue, 会引发ArgumentOutOfRangeException 或 OutOfMemoryException 异常。当然也可以通过初始化设置StringBuilder对象的初始值和最大值,这样就可以添加超过Int32.MaxValue大小的字符串了。不过,一般当我们追加小型字符串的时候才会设置初值(默认初始容量和最大容量),这样系统会分配更小的初始容量(或更精确的容量)。

总结

  以上内容均来自MSDN,简单的整理了一下来梳理思路。StringBuilder的修改方法并没有在文中列出,可参考MSDN,里面有很详细的讲解。另外,当创建两个内容相同的字符串时,它们的实例是相同的,下面代码的返回值为True。

string stringA = "msdn"; string stringB = "msdn"; Console.WriteLine(Object.ReferenceEquals(stringA,stringB)); 
原创粉丝点击