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

java中String、StringBuffer、StringBuilder的区别

时间:2015-07-13 11:37:59      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

1.可变与不可变性

  String是不可变的,它是由字符数组来保存对象的值,并声明为final类型技术分享,所以String对象是不可变字符序列。

    private final char value[];

  StringBuffer和StringBuilder都是可变的字符序列,它们也是由字符数组保存。

    char value[];

 

2.线程是否安全

  String是final类型的,不可变的,所以肯定是线程安全的。

  StringBuffer中对方法增加了同步锁或调用的方法增加了同步锁,所以是线程安全的。源码如下:    

    public synchronized String substring(int start, int end) {
      return super.substring(start, end);
    }

    public synchronized StringBuffer append(String str) {
      super.append(str);
      return this;
    }

  StringBuilder中的方法没有实现同步锁功能,所以是非线程安全的。

 

3.StringBuffer和StringBuilder的相同点

  二者都继承了抽象类AbstractStringBuilder,都继承了定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

  抽象类与接口的唯一区别在于:抽象类定义了子类中的一些共用方法,子类中只需添加一些新的操作。接口中只是对常量的定义和方法的声明,子类实现必须实现接口中所有方法。

  如果只是单线程建议使用StringBuilder,它的效率高于StringBuffer。

  

 

java中String、StringBuffer、StringBuilder的区别

标签:

原文地址:http://www.cnblogs.com/lsj2015/p/4642254.html

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