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

java中String、stringbuilder、stringbuffer区别

时间:2016-12-31 15:42:50      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:str   父类   har   reverse   bst   app   ring   同步锁   sync   

1.可变与不可变

String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。每次对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收。

  Private final char value[];

StringBuider与stringbuffer都继承自AbstractStringBuider类,在abstractstringbuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

  char[] value;

2.是否多线程安全

String中的对象是不可变的,也就可以理解为常量,显然线程安全。

AbstractStringBuilder是StringBuider与Stringbuffer的公共父类,定义了一些字符串的基本操作。如expandCapacity、append、insert、indexOf等公共方法。

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

public synchronized StringBuffer reverse() {
        super.reverse();
        return this;
}
public int indexOf(String str) {
    return indexOf(str, 0);   
}

StringBuilder并没有对方法进行同步锁,所以是非线程安全的。

StringBuffer适用于多线程程序中,保证同步性。StringBuilder适用于单线程程序中,不保证同步性。

 

在大部分情况下StringBuilder > StringBuffer > String,优先建议使用StringBuilder类。

 

java中String、stringbuilder、stringbuffer区别

标签:str   父类   har   reverse   bst   app   ring   同步锁   sync   

原文地址:http://www.cnblogs.com/licybupt/p/6239323.html

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