.NET string和stringbulider的区别

来源:互联网 发布:word中矩阵怎么打 编辑:程序博客网 时间:2024/06/18 07:45

关于String和StringBuilder的区别,有以下几个方面,第一,string s="123";s="456";其实内存中分配了两块空间,一块给“123”。另一块给“456”,而stringbuilder的话只会分配一块内存,在内存管理方面有优势,而且stringbuilder是一个整合类,提供了更多可用的方法来辅助字符串赋值,修改等操作

 

String的性能问题产生于其内容不可修改的特性。当一个字符串对象被修改、插入、连接、截断时,新的字符串对象将被分配,这会影响性能。更加常见的情况是,一个字符串对象的最终生成需要经过一个组装的过程,而在这个组装过程中必将产生很多的临时字符串对象。这些对象在堆上分配,需要垃圾回收器来回收,这些动作都会对程序的性能产生巨大的影响

string greetingText = "a b c d e f g h i j k l m n o p q r s t u v w x y z " 创建对象, 共52个字符

greetingText+="1 2 3 4 5 6 7 8 9 0 "  

创建一个新字符串实例,给它分配更多的内存,以保存合并起来的文本,72个字符

变量指向新的字符串对象,旧的字符串对象被撤销了引用,等待垃圾回收器回收

 

如果replace()方法,分配一个字符串,共26次,每个新字符串都包含100个字符串,就要堆上分配2600个字符的字符串对象

 

StringBuilder类型在最终生成String对象之前,将不会产生任何String对象,这很好地解决了字符串操作的性能问题

 

如果对一个字符串进行大量的添加动作,那么stringbuilder类所耗费的时间和string类简直不是一个数量级的

 

StringBuilder sb="hello world!"; 这样的语句是不行的,要用:StringBuilder sb=new StringBuilder("hello world!"); 这样子才能初始化一个StringBuilder对象。

sb="change the content of StringBuilder"; 这样的语句也是不行的,不能直接把String转换成StringBuilder,显式转换也不成!

 

sb.Remove(0, sb.Length);sb.Append("Test for string builder change!"); 这样子才能改变一个StringBuilder对象的内容。或者用sb.Replace();方法。

StringBuilder类还有一个这样的特性:它的Length属性是非ReadOnly的,假如有: StringBuilder sb=new StringBuilder("12345");执行: sb.Length=3;再输出sb的内容,就只剩 123 了。如果这个Length设置大于原来的长度,那么后面补空格。String 类型没有这个功能,它的Length是read only的!

 

 

 

原创粉丝点击