String、StringBuffer、StringBuilder的区别

来源:互联网 发布:联通什么套餐知乎 编辑:程序博客网 时间:2024/06/03 11:58

 今天再给大家分享一下关于String、StringBuffer、StringBuilder的区别

1.String、StringBuffer、StringBuilder的效率

  (String<<StringBuffer<StringBuilder)

  String 常量,我们可以看到String类,在java.lang包下是这么定义的,也就说String是个常量

public final class String    implements java.io.Serializable, Comparable<String>, CharSequence {}
 String s=new String("init");

 s="newInit";

再次给字符串变量s赋值的时候,等于在栈内给变量s又分配了一个内存地址

而StringBuilder和StringBuffer是变量,如果上述换成StringBuilder或StringBuffer就不会重新给变量s分配内存地址,所以在实际开发过程中,一个字符串变量如果需要频繁改变,最好就不要用String类了。

再来看下StringBuffer,这里是从StringBuffer里随意取了一个方法,我们可以看到StringBuffer里的方法都加了synchronized,说明StringBuffer是同步的,是线程安全的

/** * @throws IndexOutOfBoundsException {@inheritDoc} * @see        #length() */public synchronized char charAt(int index) {    if ((index < 0) || (index >= count))        throw new StringIndexOutOfBoundsException(index);    return value[index];}

而StringBuilder中的方法,并没有加synchronized,也就是说是异步的,非线程安全的

/** * @throws StringIndexOutOfBoundsException {@inheritDoc} */public StringBuilder insert(int index, char[] str, int offset,                            int len){    super.insert(index, str, offset, len);    return this;}

所以从效率的角度考虑要优选StringBuilder,从线程安全的角度考虑要优选StringBuffer

原创粉丝点击