String、StringBuffer、StringBuilder的区别
2017-06-26 13:34
405 查看
今天再给大家分享一下关于String、StringBuffer、StringBuilder的区别
1.String、StringBuffer、StringBuilder的效率
(String<<StringBuffer<StringBuilder)
String 常量,我们可以看到String类,在java.lang包下是这么定义的,也就说String是个常量
String s=new String("init");
s="newInit";
再次给字符串变量s赋值的时候,等于在栈内给变量s又分配了一个内存地址
而StringBuilder和StringBuffer是变量,如果上述换成StringBuilder或StringBuffer就不会重新给变量s分配内存地址,所以在实际开发过程中,一个字符串变量如果需要频繁改变,最好就不要用String类了。
再来看下StringBuffer,这里是从StringBuffer里随意取了一个方法,我们可以看到StringBuffer里的方法都加了synchronized,说明StringBuffer是同步的,是线程安全的
而StringBuilder中的方法,并没有加synchronized,也就是说是异步的,非线程安全的
所以从效率的角度考虑要优选StringBuilder,从线程安全的角度考虑要优选StringBuffer
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
相关文章推荐
- String、StringBuffer和StringBuilder的区别
- String、StringBuffer和StringBuilder 区别
- String, StringBuffer, StringBuilder的区别?
- String、StringBuffer与StringBuilder之间区别
- String StringBuffer和StringBuilder的区别?
- String,StringBuffer,StringBuilder的区别
- Java 中的字符串类String、StringBuffer、StringBuilder的区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer与StringBuilder之间区别
- String ,StringBuffer ,StringBuilder 的主要区别
- String 和StringBuffer,StringBuilder的区别(转)
- JAVA中String与StringBuffer 、StringBuilder的区别
- String、StringBuilder和StringBuffer的区别
- String StringBuffer和StringBuilder的区别?
- stringbuilder stringbuffer 与String的区别
- Java 中的字符串类String、StringBuffer、StringBuilder的区别
- String,StringBuffer与StringBuilder的区别??
- String, StringBuffer, StringBuilder区别
- String、StringBuilder和StringBuffer的区别