String、StringBuffer、StringBuilder的区别

来源:互联网 发布:看电视直播软件 编辑:程序博客网 时间:2024/06/03 22:01

String


String不可变,StringBuffer、StringBuilder可变,还有什么区别?String:查源码,类的声明是:public final,清楚的知道,fianl是不可改变的。但是操作字符串的时候,你感觉字符串变长了(改变?)原理是这样的:String name1 = "Luoce";String name2 = name1 + " Jack";字符串变?错!字符串对象的内容是无法更改的!反编译这段程序,运行机制其实是:String s = "Luoce";String s1 = (new StringBuilder().append(s).append(" Jack").toString()); 一旦我们字符串的值改变,内存创建一个新的字符串对象,原来的对象就会变为垃圾被GC回收掉,非常复杂操作来进行的String拼接

StringBuffer、StringBuilder的区别

所以,涉及到字符串操作的,我们一般使用StringBuffer或者StringBuilder,两者有什么区别StringBuffer和StringBuilder都集成了AbstractStringBuilder,而StringBuffer大部分方法都是synchronized,线程安全,但是StringBuilder没有,线程不安全。而且因为线程安全的提升,牺牲的运行速度。因为StringBuffer要维持同步锁,这肯定要消耗部分资源。

总结

    运行速度:StringBuilder >  StringBuffer  >  String    Stirng:不可变    StringBuffer线程不安全,StringBuffer线程安全

写个Demo测试速度差异

package demo;/** * String、StringBuffer、StringBuilder速度测试比较 * @author SYFC */public class StringStringBufferStringBuilderTest {    /**     * string速度     */    public void stringTest(){        long startTime = System.currentTimeMillis();        String str = null;        for (int i = 0; i < 20000; i++) {            str = str + i +",";        }        System.out.println(System.currentTimeMillis()-startTime);    }    /**     * StringBuffer速度     */    public void stringBuffer(){        long startTime = System.currentTimeMillis();        StringBuffer strBuffer = new StringBuffer();        for (int i = 0; i < 20000; i++) {            strBuffer.append(i+",");        }        System.out.println(System.currentTimeMillis()  - startTime);    }    /**     * StringBuilder速度     */    public void stringBuilder(){        long startTime = System.currentTimeMillis();        StringBuilder strBuilder = new StringBuilder();        for (int i = 0; i < 20000; i++) {            strBuilder.append(i+",");        }        System.out.println(System.currentTimeMillis()-startTime);    }    /**     * 测试     */    public static void main(String[] args) {        StringStringBufferStringBuilderTest test = new StringStringBufferStringBuilderTest();        test.stringTest();        test.stringBuffer();        test.stringBuilder();    }}结果:103353
阅读全文
0 0
原创粉丝点击