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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 上帝的尊严 中级黑马   /  2013-12-3 22:52  /  1341 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 上帝的尊严 于 2013-12-4 20:29 编辑

String类和StringBuilder类有什么不同,两个类中常用的方法,感觉上没有什么不同啊,难道要在内存上去理解不同么?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

6 个回复

倒序浏览
由于String 对象的不可改变性。每次使用String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能


比较区别再于:系统内存的开销 运行性能上

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
楼上说的很详细 还有一点 当大量的字符串相加时,每两个之间就会产生一个新的字符串对象,数量一大就很占内存了,而用stringbuilder就不会有这个问题,会在最后你用的时候一起tostring(),中间不生成其他中间对象。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
String 对象不可变性,适用在对字符串更改数量小;大范围的搜索。
StringBuilder 对象在一定大小内动态分配内存,当超出当前容量,也是重新分配内存。适用于大量字符串更改;字符串拼接。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
string类,与stringBuilder最大的不同就是,当你要在string  a 后面添加一些字符串b的时候,实际上,是新创建了一个新字符串 c,然后 c=a+b。
而在stringBuilder中,在创建字符串 a 的时候,会在后面留有一些内存空间,可以直接把要添加的字符串b添加到a 后面,没有创建新字符串,你可以用stringBuilder字符串属性Count,查看字符串长度,而用Capacity查看字符串容量。
stringBuilder就像一个水桶,Count就是当前盛的水,而Capacity就是桶容积

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
String 是不可变的对象,而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
虽然 StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前 StringBuilder 对象容纳的字符串长度混淆在一起。例如,可以创建 StringBuilder 类的带有字符串“Hello”(长度为 5)的一个新实例,同时可以指定该对象的最大容量为 25。当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

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