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

      从一开始学java时就知道如果要String是常量,StringBuilder和StringBuffer是变量,如果需要对一个字符串进行拼凑,一般都用后两者,并且也知道String的“+”其实是会新建对象的,除此之外还知道StringBuffer是安全的。但是最近在项目中,几乎在字符串的拼凑上都是采用StringBuilder。

      刚看了一篇文章,写得很清晰,很简单https://www.cnblogs.com/su-feng/p/6659064.html,我这里为了加深影响,便引用过来。

    关于速度

      StringBuilder > StringBuffer > String

      
      这里只说关于String慢的原因,我就直接引用博主所给

    String str="abc";
    System.out.println(str);
    str=str+"de";
    System.out.println(str);

      这段代码表面上看似乎我们修改了str这个变量,但是事实上并不是,JVM在处理这段代码时在第3行中,JVM会新建一个对象str,并将之前的str值加上"de"之后赋值给它,并将之前的str值“abc”回收。

      如果我们对字符串不断的拼凑,JVM就会不断的回收、新建,这会涉及到地址的分配等等一些列操作,这就是之所以其速度慢的原因。

      

    关于安全

      一直都在吼什么StringBuilder是不安全的,我之前是这样记的,builder嘛,建筑者,搞建筑需要戴安全帽,因为不安全(似乎很傻),但是Builder为什么不安全呢,SrtingBuffer就是安全的呢,博主给的解释很好:

      如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

      

    总结

      依旧引用博主

      String:适用于少量的字符串操作的情况
      StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
      StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

     

  • 相关阅读:
    Android Studio踩的坑之导入别人的Android Studio项目
    获取已发布微信小游戏和小程序源码
    小程序第三方框架对比 ( wepy / mpvue / taro )
    项目中常用的MySQL 优化
    最全反爬虫技术
    MySQL Explain详解
    php接口安全设计
    PHP进程间通信
    PHP进程及进程间通信
    springBoot优雅停服务配置
  • 原文地址:https://www.cnblogs.com/numen-fan/p/8579528.html
Copyright © 2011-2022 走看看