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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 て淡莣了陌生 于 2013-4-29 07:22 编辑

哪路大神能够解释一下StringBuilder与StringBuffer的区别啊,在文档里看着它们的方法都是一样的啊,用了一下也没看出什么区别,是不是这两个可以随意互换啊!!!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
StringBuilder线程不安全的。在单线程程序中效率比StringBuffer高,它支持所有Stringuffer相同的操作,但由于它不执行同步,所以速度更快,而StringBuffer是线程安全的,为什么StringBuffer是线程安全的:StringBuffer在jdk1.0出现,当时考虑会在多线程程序中使用,StringBuffer在添加时就不能删除,在删除时就不能添加,所以必须加上同步,但是加上同步后,在单线程程序中调用StringBuffer的方法时都会去判断同步的锁,所以效率会低,在jdk5.0后,为解决单线程使用StringBuffer效率低的问题,出现了StringBuilder,来提高运行效率。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
简单的说你创建的字符串要用在多线程环境中就用StringBuffer,因为他是线程安全的
单线程就用StringBuilder,因为他速度快

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在执行速度方面的比较:StringBuilder >  StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的

对于String、StringBuffer、StringBuilder三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
StringBuilder jdk1.5 之后出现的。较 StringBuffer 有 不同步,速度快的优点。使用方法类似。

建议参考 API  java.lang.StringBuilder

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
最大的区别就是,是否线程安全
StringBuilder是线程不安全的,所以运行效率高。
如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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