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

String,StringBuffer,StringBuilder的区别

时间:2018-02-10 15:50:41      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:存在   安全   detail   测试   速度   buffer   int   ret   改变   

 

  数据结构:

  数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

  比如数据库就是对硬盘中的数据进行有规则的管理,可以进行增删改查工作,而良好的数据结构可以优化这些操作,

  也许大家会想这些和String,StringBuffer,StringBuilder又有什么样的关系呢?是的,这里里面存在着关系:

  首先电脑存储数据的地方有硬盘和内存条,硬盘的容量较大,并且是永久保存的(比如断电后你电脑里的下载的电影是不会消失的),

  但是硬盘的对数据的操作速度较慢;内存条的话容量小,并且是断电后就会导致失去数据的(比如你电脑上开了一个软件,电脑关机重

  启后,软件就关闭了),但是内存的对数据的操作速度快,所以CPU是直接和内存进行数据的交互的(硬盘上的数据得先读取到内存 

  中,然后再被CPU进行读取),我们的软件就是被内存条读取,然后CPU进行处理;

  如果我们在软件中有一个良好的数据结构的话,就可以提高性能,而将这些对数据进行操作的代码进行封装的话就会形成一个个框架,

  而每个框架都有自己的优点和缺点,我们要灵活的运用,扬长避短,接下来切入主题。

  String,StringBuffer,StringBuilder(都是final类,不可继承)这三个框架呢都可以对字符串进行操作,不同的是:

  String:

  String它是一个不能改变的量,比如

String name = new String("小明");//已经在内存中开辟了一块空间并装入了“小明”,再将name指向这个内存空间
name = "小星";//相当于重新开辟了一块内存空间并装入小星,然后再将name重新指向这个新的内存空间,最后jvm的GC会将原来的空间清除

  如果字符串反复修改的话,势必会造成很大消耗。

  StringBuilder:

  java就推出了StringBuilder,这个类是一个可变量,当它初始化后,再对其数据进行修改,它会在原来开辟内存上进行修改,并不会重新开辟一块空间

  但是这个类存在线程安全问题,要解决这个问题啊,于是StringBuffer站了出来.

  StringBuffer:

  它呢在他兄弟StringBuilder基础上,使用synchronized解决了线程安全问题,但因为使用了synchronized会使性能降低,所以单线程中StringBuilder运行速度比

  StringBuffer快,我截取了StringBuffer类中的部分源代码:

public synchronized int length() {
        return count;
    }

    public synchronized int capacity() {
        return value.length;
    }


    public synchronized void ensureCapacity(int minimumCapacity) {
        if (minimumCapacity > value.length) {
            expandCapacity(minimumCapacity);
        }
    }

    /**
     * @since      1.5
     */
    public synchronized void trimToSize() {
        super.trimToSize();
    }

 

  总结:

     1:如果是不太变化的字符串,可以使用String = XX(没有new开辟空间,而是保存在常量池中);速度较快;

     2:单线程中,经常变动的字符串使用StringBuilder类更好;

     3:多线程中,经常变动的字符串使用StringBuffer类更好;

     可以查看详细测试结果:http://blog.csdn.net/jessysong/article/details/54020668##1

 

String,StringBuffer,StringBuilder的区别

标签:存在   安全   detail   测试   速度   buffer   int   ret   改变   

原文地址:https://www.cnblogs.com/dtx0/p/8438767.html

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