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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾玉锋 高级黑马   /  2012-7-20 07:49  /  2281 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

StringBuilder和String的区别
在平时我们在练习的时候,基本都是在用String类进行字符串操作,但资料上说
在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,而不要使用String
那么,是否只有在大量字符串拼接和频繁对某一字符串进行操作时,StringBuilder才会显示出优势呢?
除了以上的两种情况,还有哪些情况用StringBuilder有明显优势呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

正序浏览
String对象是不可改变的。而StringBuilder 对象是动态对象。如果对字符串的运算需求很频繁,那建议用StringBuilder,它的运算效率快,而string运算即占内存,而且运算也慢。
StringBuilder有明显优势除了运算效率高一些外,单线程操作不需要同步应该也算个优势吧。

评分

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

查看全部评分

回复 使用道具 举报
当你处理字符串时要大量操作时,比如分割字符串,取字符串的子字符串,连接字符串等等这样要创建很多新的string,string[]对象等,要分配空间,然后再存储,所以用string会很麻烦。处理小量字符串时两者都差不多。

评分

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

查看全部评分

回复 使用道具 举报
String是一个不可变的字符串,而StringBuilder是一个可变的字符序列
这个String类提供了数值不可改变的字符串
StringBuilder用在字符串缓冲区被单个线程使用的时候

评分

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

查看全部评分

回复 使用道具 举报
我的体会是这样的,在对大数据字符串进行拼接时,使用string,每个拼接的操作都会产生新的字符串出来,如果进行拼接的字符串字符数量很大,而且每回都要给它分配新的空间,把这些全部的都存储进去,耗时耗空间,如果是个10000个字符的字符串,一次追加2个单词,string操作就悲剧了,每次都要存储新生成的10000多字符的字符串。
而StringBuilder不会产生新的字符串,比如追加一部分字符,只是将要追加的2个字符存储进去罢了,对于很长的字符串的确是快。但是对于一般较小的字符串处理,只要不是非常频繁的去生成新的字符串,用string比StringBuilder要稍快些,而且能使用的方法更多,很方便。

评分

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

查看全部评分

回复 使用道具 举报
StringBuilder的优势应该就是拼接字符串。
String   对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用   System.Text.StringBuilder   类。例如,当在一个循环中将许多字符串连接在一起时,使用   StringBuilder   类可以提升性能。   

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
StringBuilder的优势是在String要做很多操作时,如大量的替换和串联,这个时候String每一次操作都会产生一个新的String对象,严重影响性能,而StringBuilder可以避免这个问题。也就是说在操作量不大的情况下,StringBuilder反而是没有性能优势的。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
StringBuilder是线程不同步的,通常用于单线程,能够提高效率。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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