String、StringBuilder和StringBuffer的区别和用法

分别使用使用这三种来拼接字符串,对比各自损耗的时间:
通过测试:java

package com.test;

public class Main{

    public static void main(String[] args){
        testString();
        testStringBuffer();
        testStringBuilder();
    }
    private static void testStringBuilder() {
        long begin = System.currentTimeMillis();
        StringBuilder str = new StringBuilder("");
        for (int i = 0; i < 30000; i++) {
            str.append(i);
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("-------------StringBuilder性能快--------------");
        System.out.println(time);
    }
    private static void testStringBuffer() {
        long begin = System.currentTimeMillis();
        StringBuffer str = new StringBuffer("");
        for (int i = 0; i < 30000; i++) {
            str.append(i);
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("------------StringBuffer安全的---------------");
        System.out.println(time);
    }
    //String 作作字符串拼接的时候,性能极低,每次拼接的时候对象改变
    public static void testString(){
        long begin = System.currentTimeMillis();
        String str = "";
/*      for (int i = 0; i < 30000; i++) {
            str += i;
        }*/
        for(Integer i =0; i< 30000; i++){
            str += i.toString();
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("-----------String----------------");
        System.out.println(time);
    }
}

结论:之后拼接字符串,通通使用StringBuffer/StringBuilder,不要使用String。数组

String和StringBuilder以及StringBuffer的区别:
StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的。安全

惟一的区别(建议使用StringBuilder):
StringBuffer:StringBuffer中的方法都使用synchronized修饰符,表示同步的在多线程并发的时候能够保证线程安全,保证线程安全的时候,性能(速度)较低。
StringBuilder:StringBuilder没有使用synchronized修饰符,不安全,但性能高。
StringBuilder sb = new StringBuilder ()等价于…new StringBuilder(16)(API可见..) 使用StringBUilder无参数的构造器,在底层建立一个长度为16的char数组:
char[] value = new char[16];
此时该数组只能存储16字符,若是超过了,得自动扩容:
自动扩容(建立长度更大得数组,再把以前得数组拷贝到新数组)
此时性能极低,通常得,咱们事先知道大概须要存储多少字符,在构造器中就应该设置。多线程

相关文章
相关标签/搜索