zoukankan      html  css  js  c++  java
  • Java中的String,StringBuffer,StringBuilder详解与区别

    1.String

    Java中string类是不可变的,其中在声明的源代码中用的final,所以只能声明一次。
    所以每次在明面上的改变其实是重新生成一个String对象,指针指向新的String对象。
    同时,String内部重写的了equal的方法,原本Object的equal就是两个对象相等就可以,
    但是现在,并不能靠对象相等来判断值相等了,重写的equal中会挨个比较字符,
    这也就是为啥比较同样内容字符串要用equal的原因。

    同时String a="111"+"222"+"333";
        跟 String b="111";
            String c="222";
            String d="222";
            String a=b+c+d;
        的开销是不一样的,明显上面的更快一点,String这样建立字符串是最快的

        后者其实也是调用了StringBuffer的append方法,一个一个加进去的。
        前者,编译的时候就是111222333了

    2.StringBuffer
    StringBuffer是线程安全的。一个String的字符缓冲区,如果要频繁的进行字符的修改,
    用这个是最好的选择,并且每次操作就是对自身对象的操作,就跟String类区分开了。
    其中用的最多的是append和insert,append就是插入到字符串末尾,insert就是插入到指定位置。


    3.StringBuilder
    但是又不是每次都是很多线程操作并且频繁的操作,但是又不能用String不停创建新对象影响性能。
    这样就出现了StringBuilder。API都是跟StringBuffer兼容的,大都适用于单线程操作。



    三者用法:
    1.String适用于少量数据的操作,StringBuffer适用于多线程频繁操作大量数据,StringBuilder适用于
    单线程操作大量的数据。
    2.不要经常用字符串拼接+号,因为每次都会创建新对象增加开销,例如上面的String a=b+c+d;
    3.StringBuffer和StringBuilder最好创建时候定义好长度,这样更好提高性能。
    还有区别好系统的运行方式,多线程还是单线程,这样可以根据StringBuffer和StringBuilder的特色选择更好的方式

  • 相关阅读:
    高斯拉普拉斯算子(Laplace of Gaussian)
    Windows的TCP协议参数
    poj 1182食物链(并查集)
    linux网络体系架构
    谈谈对于企业级系统架构的理解
    Redis源码解析(1)——源码目录介绍
    在多台服务器上简单实现Redis的数据主从复制
    利用Nginx做负载均衡
    C#中的BackgroundWorker控件
    C#中的线程(四)高级话题
  • 原文地址:https://www.cnblogs.com/adaonling/p/5777910.html
Copyright © 2011-2022 走看看