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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wang346351 中级黑马   /  2013-4-16 19:59  /  1835 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杞文明 于 2013-5-22 12:55 编辑

String 和StringBuilder有什么区别????   为什么字符拼接时建议使用StringBuilder??                           

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

6 个回复

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

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都是String类的对象。字符串是常量;它们的值在创建之后不能改变。所以可以共享它们。StringBuffer是字符串缓存区,它的内容可以被修改,长度也可以改变,StringBuffer类是线程安全的,也就是说多个线程可以安全的访问StringBuffer对象
回复 使用道具 举报
string是不可变对象,每次对string类型的变量进行重新赋值的时候,其实系统都会开辟一个新的内存空间来保存这个值,也就是说,你没做一次改变,都给系统内存增加了负担,当积累到一定程度,可能会使系统运行变慢;而stringbuilder是一个可变的字符序列,对他进行的操作都是在原有的内存空间中,处理速度会更快。
回复 使用道具 举报
StringBuilder和String对象都可以很方便的处理字符串,他们具备各自的特点,如下:

String具有以下三个特点:

1.  String是引用类型,在堆上分配内存。

2.  String对象一旦生成,就不可改变。

3. String运算时会产生一个新的实例。

StringBuilder具有以下两个特点:

StringBuilder对象是动态对象,允许扩充它所封装的字符串中的字符数。

StringBuilder可以用于修改StringBuilder中的内容。

由于String对象一旦声称,就不可改变,所以每次使用System.String类中的方法时,都需要在内存中创建一个新的字符串对象,这会分配新的空间给新的对象。如果对字符串执行重复修改,创建一个新的String对象导致 的系统开销可能会非常昂贵。如果不创建新的对象,只是修改字符窜,则可以使用StringBuilder类。StringBuilder类型可以很好的解决字符串操作的性能问题,在它声称String对象之前,将不会产生任何String对象.因此在运算速度及效率上就产生了巨大差异。
回复 使用道具 举报
学习了~  感谢分享!
回复 使用道具 举报
看下string与StringBuilder拼接字符串的效率吧:

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

String与StringBuilder拼接字符串性能比较.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马