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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请问各位,StringBuilder类与String类有什么区别?
在什么情况下使用StringBuilder类方便?

评分

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

查看全部评分

11 个回复

倒序浏览
用StringBuilder处理长字符串速度比string   要快些,

评分

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

查看全部评分

回复 使用道具 举报
String数据类型代表的是一种不可变的字符串, 以为着对这个字符串的插入, 删除或是更改,唯一的方式就是建立一个新的字符串,会引发对内存的配置操作以及对内存的反配置操作,加重CLR管理内存和内存回收的工作,这中情形尤其是在操作大字符串时,更为明显,在单一的用户环境中,不会带来任何问题,但是在服务器环境中,在效能和可扩展性上会造成比较严重的问题。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。String类型在做字符串的连接操作时,效率是相当低的,并且由于每做一个连接操作,都会在内存中创建一个新的对象,占用了大量的内存空间。这样就引出StringBuilder对象,StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。这一点我们平时使用中也许都知道,连接操作频繁的时候,使用StringBuilder对象

看出用String来做字符串的连接时效率非常低,但并不是说任何情况下都要用StringBuilder,当我们连接很少的字符串时可以用String,但当做大量的或频繁的字符串连接操作时,就一定要用StringBuilder。

评分

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

查看全部评分

回复 使用道具 举报
String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
StringBuffer 与StringBuilder
从 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder 。与StringBuffer相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

评分

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

查看全部评分

回复 使用道具 举报
补充一下:
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
         String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
回复 使用道具 举报
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后则不可改变,改变的只是其内存地址的指向,而StringBuffer中的内容是可以改变的 .
对于StringBuffer而言,本身是一个具体的操作类,,所以不能像String那样采用直接赋值的方式进行对象的实例化,必须通过构造方法完成.
在String中字符串的连接使用”+”,而在StringBuffer中要使用append方法.

评分

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

查看全部评分

回复 使用道具 举报
两者处理字符其实差不多,但是如果字符串需要大量操作的时候,string需要声明很多新的对象,占用内存,而stringbuilder不会,所以操作繁琐或者字符串数量众多的时候用后者

评分

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

查看全部评分

回复 使用道具 举报
蔡尚猛 发表于 2012-7-31 19:42
用StringBuilder处理长字符串速度比string   要快些,

谢谢您的解答,待我慢慢体会
回复 使用道具 举报
赵鹏程 发表于 2012-7-31 22:28
两者处理字符其实差不多,但是如果字符串需要大量操作的时候,string需要声明很多新的对象,占用内存,而st ...

谢谢您的解答,待我慢慢体会
回复 使用道具 举报
王广彬 发表于 2012-7-31 22:18
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后则不可 ...

谢谢您的解答,待我慢慢体会
回复 使用道具 举报
夏儒日 发表于 2012-7-31 22:01
补充一下:
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String ...

谢谢您的解答,待我慢慢体会
回复 使用道具 举报
黄锐 发表于 2012-7-31 21:32
String数据类型代表的是一种不可变的字符串, 以为着对这个字符串的插入, 删除或是更改,唯一的方式就是建 ...

谢谢您的解答,待我慢慢体会
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马