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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dark_Horse 中级黑马   /  2014-5-23 09:55  /  1562 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Dark_Horse 于 2014-5-24 10:10 编辑

什么时候使用StringBuffer,什么时候使用StringBuilder啊,看似都有相同方法啊......

3 个回复

倒序浏览
大概可以这样区分:涉及多线程的时候建议使用StringBuffer,因为它同步,安全;
StringBuilder是不同步的,所以进行单线程开发时存在安全问题。但是由于如此,就少了里边有个锁的判断环节,所以提高了程序的效率。具体该用哪个,可以根据以上区别进行判断。

但是呢,还是建议你看看Java基础教学视频,毕老师讲的关于String那章。毕竟这是我刚刚总结出来的,可能会存在中间有漏掉的环节。。
回复 使用道具 举报
楼山的同学说的很对,StringBuffer和StringBuilder两者在创建对象,调用成员方法上都是一致的,不同的是它们的效率和安全问题:Stringbuffer不保证同步,其实例用于多个线程是不安全的,如果需要这样的同步,则建议使用StringBuffer。其区别的重点是效率,而StringBuilder效率更高,高效,但不安全,StringBuffer与其相反。
回复 使用道具 举报
LZ说的问题实际是String、StringBuffer、StringBuilder三者的区别问题。
    String是JDK1.0就有的类;StringBuffer也是JDK1.0;StringBuilder则是JDK1.5才有的。相信楼主已经知道String与StringBuffer的区别,一个是长度不可变的,一个是长度可变的。现在的问题是StringBuilder也是长度可变的,与StringBuffer区别是什么?StringBuffer是线程安全的,所谓线程安全就是多个线程(涉及多线程)访问同一个变量,会不会出现数据不同步的情况,比如一个线程准备读数据,而另一个线程却正在对此数据进行修改,导致第一个数据出现“脏读”,此时就会出现麻烦,这时就需要通过同步信号量(操作系统中进程同步)进行控制,不过在Java中同步方法由synchronized修饰,保证了多个线程只能由一个线程对数据进行操作,其他线程处于等待状态,实现数据同步。当然这是需要额外的空间和进程进行保证的,所以导致StringBuffer会比较慢。StringBuilder则是线程不安全的,当单线程操作时,不会出现任何问题;但是当多个线程同时访问时,就会出现“脏读”问题,它的优点就是快,因为少了相应的信号量的处理。
     以上为原理部分,StringBuffer和StringBuilder方法确实一样,想知道到底使用哪个,就看您的使用环境如果是涉及到多线程访问,毫无疑问使用StringBuffer,可保证数据同步;如果是单线程访问,优先用StringBuilder速度快。
     LZ可以查看String/StringBuffer/StringBuildr源码http://www.cnblogs.com/jobscn/archive/2011/11/13/2246438.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马