String、StringBuilder与StringBuffe

2018-03-13  本文已影响0人  pianpianboy

String、StringBuilder与StringBuffer区别

时间:20180313


String:String/StringBuffer/StringBuilder三者的功能区别
  String作为最基础的引用数据类型,日常的开发中被大量的使用。基于不可变的特性,一旦被过度的使用,堆内存就会负荷不堪,甚至影响性能,为此,java设计者特意为String在方法区中开辟了字符串常量池,以减少String的实例创建,然后,在面对大数量的情况下,字符串常量池也未必能解决问题。因此AbstractStringBuilder应运而生,就是为了解决String频繁创建而引发的内存性能下降的问题。
我们先要记住三者的特征:

带着两个问题去看看String/StringBuffer/StringBuilder的区别


String vs AbstractStringBuilder
String: 不可变性:重新创建一个对象
String代码的底层代码实现:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];   //

    /** Cache the hash code for the string */
    private int hash; // Default to 0```
    
    //other codes

测试代码:

 String str = new String("a");
        str = str  + “b” ;
内存模型

AbStractStringBuilder:可变性
AbstractStringBuilder底层代码实现:
valu[]相当于String,没有final修饰

public class TestString {
    //测试testString
    public static void testString() {
        long start = System.currentTimeMillis();
        String str = null;
        for(int i = 0; i < 20000; i++) {
            str = str + i + ","; 
        }
        System.out.println(System.currentTimeMillis()-start);
    }
    //测试testStringBuffer
    public static void testStringBuffer() {
        long start = System.currentTimeMillis();
        StringBuffer sbuf = new StringBuffer();
        for(int i=0; i <20000; i++) {
            sbuf.append(i + ",");
        }
        System.out.println(System.currentTimeMillis()-start);
    }
    
    //测试testStringBuilder
    public static void testStringBuilder() {
        long start = System.currentTimeMillis();
        StringBuilder sbuild = new StringBuilder();
        for(int i = 0; i < 20000; i++) {
            sbuild.append(i+",");
        }
        System.out.println(System.currentTimeMillis()-start);
    }
    
    public static void main(String[] args) {
        testString();
        testStringBuffer();
        testStringBuilder();
    }
}

测试结果:


运行结果
上一篇下一篇

猜你喜欢

热点阅读