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使用单线程而字符串操作多,量大的。
  • 相关阅读:
    String判空效率比较
    myeclipse数据库逆向hibernate教程
    博客使用说明和我的学习心得(技术路线和书单)
    【小记】go如何判断key是否在map中
    MySQL必知必会笔记——MySQL其他操作
    MySQL必知必会笔记——查询的进阶知识
    MySQL必知必会笔记——查询的基础知识
    MySQL必知必会笔记-Mysql基本操作
    Linux学习笔记:Linux命令之权限管理命令
    Linux学习笔记:用户与用户组
  • 原文地址:https://www.cnblogs.com/gujiewei/p/9670571.html
Copyright © 2011-2022 走看看