A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 幸福的彼岸 中级黑马   /  2014-1-15 10:08  /  1300 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 幸福的彼岸 于 2014-1-15 14:54 编辑

StringBuilder和String有什么区别呀?

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1

查看全部评分

5 个回复

倒序浏览
在进行累加操作时,StringBuilder利用Append方法实现,拥有比string快很多的优势,累加次数越多,优势越明显。对于string类型系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象,而StringBuilder则是在原有字符串的基础 上进行累计,而不会多次创建对象

在操作大量字符串,特别是拼接的时候最后是StringBulider效率高,内存占用率小,string会产生很多中间字符串,耗费内存,而且StringBulider还有其他很多方法,增删改查相比string方便的多

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1

查看全部评分

回复 使用道具 举报 1 0
1.在.NET中String是不可改变对象,一旦创建了一个String对象并为它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值
2.String类型在做字符串的连接操作时,效率是相当低的,并且由于每做一个连接操作,都会在内存中创建一个新的对象,占用了大量的内存空间。这样就引出StringBuilder对象,StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1

查看全部评分

回复 使用道具 举报
String 对象是恒定不变的,而StringBuilder则是可变的

StringBuilder是.NET提供的动态创建String对象的高效方式,以克服String对象恒定性带来的性能 影响 。

如果只是单一的对一个string对象做少量几次的操作,则用string 对象

如果需要大量的字符拼接时,这时就一定要用StringBulder对象

因为String 对象的恒定性,创建一个字符后,其不会再改变,对于string的操作都会重新 生成一个新副本

而stringBuilder则是针对同一字符对象做处理,只会生成一个对象。

所以在不同情况下要用不同的对象

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1

查看全部评分

回复 使用道具 举报
String类有不可改变性。每次执行字符操作时,都会创建一个新的String对象。  StringBuilder 类解决了对字符串进行重复修改的过程中创建大量对象的问题。初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的.并且允许,我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度.

评分

参与人数 1技术分 +1 收起 理由
卖火柴 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马