zoukankan      html  css  js  c++  java
  • String、StringBuffer、StringBuilder

    String、StringBuffer、StringBuilder 比较


    先对三者的速度做一下比较:
    1.String
    image_1clliaguk1vq99a6rifk511ic63m.png-25.7kB
    结果:
    image_1cllibmfd136g129rg0m1ud21ptb43.png-11.1kB

    2.StringBuffer:
    image_1cllih7i3f4515741a8b50u1r64g.png-29.2kB
    结果:
    image_1clliiq071m104mt2mqimt16vh60.png-28.4kB

    3.StringBuilder:
    image_1clliptikgl0181j85cffrj6n6d.png-28.5kB
    结果:
    image_1clliqdputbcejj1bto1o931hee6q.png-9.5kB

    三者的速度:
    StringBuilder > StringBuffer > String


    不以速度论成败

    存在即是有道理的,我们下面分别来分析下各个的优势:
    String类
    是我们平常最常用的,却是最慢的,为什么?
    关于下面这个简单的操纵:

        String a="abc";
            a+="de";

    我们知道最后 a=”abcde”。我们眼睛看到的只是在后面添加了一个”de”进去,但是真实的操作却要比这复杂的多。
    须知String创建的是一个常量,也就是创建了这个对象,你就不能对它进行修改了,那么是怎么实现添加“de”的呢?
    机器内部隐藏地又新建了一个对象,然后在原来的基础上添加了”de”进去,同样这样是一个常量,创建好就不能修改了,而原来的”abc” 对象,失去作用后,之后就会被垃圾回收器回收。
    所以,对于我们之前测试的那个for循环,我们消耗的时间之所以那么长,就是因为不断地在创建删除对象。

    但是不可否认地是String操作起来的确很方便,他可以直接通过"+ ="来进行增添赋值。
    

    StringBuffer和StringBuilder
    通过之前的测试我们看到二者的速度差别不大,但是StringBuffer还是稍逊风骚,问题出在哪里?
    阅读官方文档:

    As of release JDK 5, this class has been supplemented with an
    equivalent class designed for use by a single thread, StringBuilder.
    The StringBuilder class should generally be used in preference to this
    one, as it supports all of the same operations but it is faster, as it
    performs no synchronization.

    官方说明是对于不需要线程安全的程序,建议使用StringBuilder:
    查看源码,果然如是:
    StringBuffer里大多都是sychronized的:
    image_1clljvdbo46j1sib1qa7bsogrt77.png-53.5kB
    StringBuilder里没有sychronized:
    image_1cllk6olgan741i1ba91dhv1vpb97.png-19kB
    所以二者的用途也显而易见了,安全性是区分二者的最大因素。


    用途总结:

    1. String用于字符串操作少的,要求简便的;
    2. StringBuffer适用于线程安全,比如多线程场景访问修改字符串的;
    3. StringBuilder使用单线程而字符串操作多,量大的。
  • 相关阅读:
    [2018福大至诚软工助教]原型设计+用户规格说明书小结
    高等数理逻辑大作业
    [2018福大至诚软工助教]测试与优化小结
    [2018福大至诚软工助教]结对项目小结
    BETA 版冲刺前准备
    Alpha冲刺之事后诸葛亮
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
  • 原文地址:https://www.cnblogs.com/gujiewei/p/9670571.html
Copyright © 2011-2022 走看看