黑马程序员技术交流社区

标题: StringBuilder 和 String 的区别? [打印本页]

作者: hunter    时间: 2013-4-1 10:32
标题: StringBuilder 和 String 的区别?
StringBuilder String 的区别?两个使用是好像没什么不同呀
作者: hunter    时间: 2013-4-1 10:33
麻烦了哈

作者: guobin_lu    时间: 2013-4-1 10:33
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然,一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。

作者: DWC_5101    时间: 2013-4-1 13:09
String 在进行运算时(如赋值、拼接等)会产生一个新的实例
而 StringBuilder 则不会
作者: 管章鹏    时间: 2013-4-1 14:17
本帖最后由 管章鹏 于 2013-4-5 17:57 编辑

在进行大量字符串拼接的时候,string的问题:
1.内存浪费,产生大量的垃圾内存。
2.由于String的不可变性,每次拼接都会创建一个新的string对象,每次创建新对象的时候,本身也是比较耗时耗资源的。所以造成了使用string拼接字符串性能极其低下。
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。
在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,
则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。可以这么说stringbuilder是一个拼接字符串的工具
因为他是一个stringbuilder类型,所以在使用的时候最好都要Tostring()。

希望对你有所帮助!
作者: 张正强    时间: 2013-4-1 17:07
      String 类是一种传统的修改字符串的方式,它可以完成把一个字符串添加到另一个字符串上的工作,但是在.Net 框架下,这个操作实在是划不来.因为系统先是把两个字符串写入内存,接着删除原来的String 对象,然后再创建一个String 对象,并读取内存中的数据赋给该对象.这一来二去的,耗费资源和时间。
      StringBuilder 类(位于System.Text命名空间下)提供的Append 方法,能够在已有对象的基础上进行字符串的修改,简单而且直接。String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而StringBuilder 则不会,因此进行大量的字符串拼接或频繁对某一字符串操作时最好使用StringBuilder。
作者: 熊薇    时间: 2013-4-1 20:35
简单的说string是引用类型,具有不可变性
如: string  str="Hello";  //str变量指向"Hello"
       str="World";  //改变了str的指向,指向"World",而原来的字符串"Hello"仍然存在,只是没有变量指向它                  
对很长的或需要频繁操作的字符串,往往消耗大量的资源
而StringBuilder允许直接修改字符串本身的内容,而不是每次操作都生成新的字符串
作者: 郑丹丹1990    时间: 2013-4-5 19:03
学了了哈!不错
作者: 孔健    时间: 2013-4-5 20:51
学习了。
作者: 黑马田杰    时间: 2013-4-5 21:50
本帖最后由 黑马田杰 于 2013-4-5 22:00 编辑

看一下性能比较就知道以后拼接字符串该用哪个了:

String与StringBuilder拼接字符串性能比较.png (32.66 KB, 下载次数: 32)

String与StringBuilder拼接字符串性能比较.png

作者: 管章鹏    时间: 2013-4-6 10:42
如果有问题的话可以继续提问,如果问题解决了,可以将问题改为“已解决”,谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2