Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?

Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系

创建成功的String对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大的增加系统开销。而JavaSE 5.0新增了可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。也许我们会问那JavaSE5.0之前呢?实际在JavaSE5.0之前有StringBuffer,但是StringBuffer是线程安全的,这就会造成效率的底下,所以JavaSE5.0新增了StringBuilder来弥补StringBuffer的不足。

String  :不可改变

StringBuffer:可改变  线程安全

StringBuilder:可改变  线程不安全

验证连接字符串,String+StringBufferappend谁的效率高

package cn.sb.capacity;

public class StringAndStringBuffer {
    public static void main(String[] args) {
        fun1();
//        fun2();
//        fun3();
//        fun4();
    }
    /**
     * new   String
     */
    public static void fun1(){
        String str1 = new String("");    
        long start = System.currentTimeMillis();
        for (int i = 0; i < 20000; i++) {
            str1 += i;
        }
        long end = System.currentTimeMillis();
        System.out.println("new字符串str1,添加字符串用时:"+(end-start));
    }
    /**
     * 声明字符串
     */
    public static void fun2(){
        String str2 = "";
        long start = System.currentTimeMillis();
        for (int i = 0; i < 20000; i++) {
            str2 += i;
        }
        long end = System.currentTimeMillis();
        System.out.println("声明字符串str2,添加字符串用时:"+(end-start));
    } 
    /**
     * 安全字符串缓冲
     */
    public static void fun3(){
        StringBuffer sb1 = new StringBuffer("");
        long start = System.currentTimeMillis();
        for (int i = 0; i < 200000; i++) {
            sb1.append(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("安全sb1添加字符串用时:"+(end-start));
    }
    /**
     * 高效字符串缓冲
     */
    public static void fun4(){
        StringBuilder sb2 = new StringBuilder("");
        long start = System.currentTimeMillis();
        for (int i = 0; i < 200000; i++) {
            sb2.append(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("高效sb2添加字符串用时:"+(end-start));
    }
}

 

欢迎各位大神提问题及补充不足和警醒错误!

原文地址:https://www.cnblogs.com/lin-jing/p/7836533.html