码迷,mamicode.com
首页 > 其他好文 > 详细

String,StringBuffer,StringBuilder的区别

时间:2018-06-16 12:06:57      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:nal   回收机制   使用   end   builder   col   des   string   mem   

  String对象是字符串常量,不可变的,底层是用final修饰的,public final class String。

  我们经常做的字符串+运算,这样是一种不可取的做法,因为String的对象是常量。

  比如String s = "123",s=s+"45",它不是在原来的s上做的操作,而是又重新创建了个对象,赋值给他,GC(垃圾回收机制)在把原来的对象回收,这样是非常消耗内存和时间的,不建议使用。

  

  StringBuffer对象是字符串变量,可变,作的操作都是在原先对象的基础上进行的,相比String会好很多。

  比如StringBuffer s = new StringBuffer().append("123"),s.append("45"),执行完这两行代码,只创建了一个对象s。

 

  StringBuilder对象是字符串变量,可变,和StringBuffer都是在原先得对象上进行相应的操作。

 

  区别:

    (1)String-->字符串变量,StringBuffer和StringBuilder-->字符串变量

    (2)String-->适用于少量的字符串操作,StringBuffer-->适用于在多线程下,在字符串缓冲区进行大量的字符串操作,StringBuilder-->适用于单线程下在字符串缓冲区进行大量操作

    (3)String和StringBuilder线程不安全,StringBuffer线程安全,方法几乎都使用了锁机制

    (4)执行速度String最慢,其次是StringBuffer,最快的是StringBuilder,StringBuffer和StringBuilder相差较少

  测试:

/**
 * @Author:Alex_lei
 * @Description: Test (String,StringBuilder,StringBuffer) speed
 */
public class StringBuffer_Builder {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        String str = "";
        for(int i=0;i<10000;i++){
            str=str+"a";
        }
        long stop = System.currentTimeMillis();
        System.out.println(stop-start);
        start = System.currentTimeMillis();
        StringBuilder stringBuilder = new StringBuilder();
        for(int i=0;i<10000;i++){
            stringBuilder.append("a");
        }
        stop = System.currentTimeMillis();
        System.out.println(stop-start);
        start = System.currentTimeMillis();
        StringBuffer stringBuffer = new StringBuffer();
        for(int i=0;i<10000;i++){
            stringBuffer.append("a");
        }
        stop = System.currentTimeMillis();
        System.out.println(stop-start);

    }
}

 

  结果:

  138 -->String

  0 -->StringBuilder

  1 -->StringBuffer

 

String,StringBuffer,StringBuilder的区别

标签:nal   回收机制   使用   end   builder   col   des   string   mem   

原文地址:https://www.cnblogs.com/lyr999736/p/9189929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!