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使用单线程而字符串操作多,量大的。
  • 相关阅读:
    JavaScript打开新窗口被拦截问题
    FileReader读取本地文件
    JS实现数组去重的6种方法总结
    cssReset
    鼠标拖拽定位和DOM各种尺寸详解
    关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js
    AJAX的get和post请求原生编写方法
    Grunt的配置和使用
    浏览器的工作流程
    Python基础——函数的迭代器和生成器
  • 原文地址:https://www.cnblogs.com/gujiewei/p/9670571.html
Copyright © 2011-2022 走看看