码迷,mamicode.com
首页 > 编程语言 > 详细

Java千百问_06数据结构(022)_StringBuffer/StringBuilder有什么区别

时间:2016-05-22 12:11:13      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

点击进入_更多_Java千百问

1、StringBuilder是什么

StringBuilder是非线程安全的可变字符串类。
java.lang.StringBuilder这个可变的字符序列类是5.0新增的。继承于AbstractStringBuilder(大部分方法都在该类实现),并不是线程安全的,当多个线程同时修改一个对象时很可能会冲突。

了解String是什么看这里:String是什么

部分AbstractStringBuilder、StringBuilder源码:

abstract class AbstractStringBuilder implements Appendable, CharSequence {

    public AbstractStringBuilder append(Object obj) {

        return append(String.valueOf(obj));

   }

    public AbstractStringBuilder append(String str) {

        if (str == null ) str = "null" ;

        int len = str.length();

       ensureCapacityInternal(count + len);

       str.getChars( 0 , len, value, count);

       count += len;

        return this ;

   }

}
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence

{

    public StringBuilder append(Object obj) {

        return append(String.valueOf(obj));

   }

    public StringBuilder append(String str) {

        super . append(str);

        return this ;

   }

}

2、StringBuffer是什么

StringBuffer是线程安全的可变字符串类

java.lang.StringBuffer继承于AbstractStringBuilder(同StringBuilder一样也继承于该类,并且部分方法都在该类实现),重写了其大部分方法,逻辑没变只是将其改为synchronized线程同步

部分StringBuffer源码:

public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence

{

    public synchronized StringBuffer append(Object obj) {

        super . append(String.valueOf(obj));

        return this ;

   }

    public synchronized StringBuffer append(String str) {

        super . append(str);

        return this ;

   }

}

3、StringBuffer/StringBuilder有什么区别

由上面概念可以看到,StringBuffer是线程安全的,而StringBuilder并不是,StringBuilder在多线程中可能会发生冲突

所以,当要保证线程安全的时候就需要用StringBuffer,然而在多线程时,StringBuffer比StringBuilder性能要差(synchronized相当于线程堵塞)。

Java千百问_06数据结构(022)_StringBuffer/StringBuilder有什么区别

标签:

原文地址:http://blog.csdn.net/ooppookid/article/details/51474117

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!