您的位置:首页 > 产品设计 > UI/UE

String、StringBuffer、StringBuilder的区别

2017-06-26 13:34 405 查看
 今天再给大家分享一下关于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息