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

    String 底层实现

     private final char value[];

    String 的值是不可变的,每次对 String 的操作都会生成新的 String 对象,造成内存浪费

    StringBuffer 和 StringBuilder 继承了 AbstractStringBuilder

     AbstractStringBuilder中

    char[] value;

    是可变的字符数组

    所以在进行频繁的字符串操作时,建议使用StringBuffer和StringBuilder来进行操作

    StringBuffer

      是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来额外的性能开销

      StringBuffer类中方法定义前面都会有synchronize关键字

    StringBuilder

      是线程不安全的

    StringBuffer的性能要远低于StringBuilder

       性质 效率   线程安全
    String  常量   慢  /
    StringBuffer  变量  快  安全
    StringBuilder  变量  快+  不安全
     

    应用场景

    [1]在字符串内容不经常发生变化的业务场景优先使用String类

      eg:

       常量声明、少量的字符串拼接操作等。

       如果有大量的字符串内容拼接,避免使用String与String之间的“+”操作,因为这样会产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)

    [2]在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程环境下,建议使用StringBuffer

      eg:

         XML解析、HTTP参数解析与封装

    [3]在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程环境下,建议使用StringBuilder

      eg:

         SQL语句拼装、JSON封装等

  • 相关阅读:
    WPF 修改Webbrowser的IE版本小程序(32位)
    AnyCAD OpenSource 版本下载和编译
    请求ajax失败的原因(进入到error)
    如何将多个数据的- 转为:来匹配josn格式
    jQuery ajax如何传多个值到后台页面,举例:
    java finalize方法总结、GC执行finalize的过程
    SQL Server索引碎片整理实际操作记录
    MYSQL手册
    Eclipse显示行号
    MyEclipse设置Console输出到文件
  • 原文地址:https://www.cnblogs.com/baby123/p/12973330.html
Copyright © 2011-2022 走看看