• String,StringBuffer,StringBuilder的区别


    1.三个类之间的关系

    都是通过字符数组来实现的

    StringBuffer和StringBuilder都继承自AbstractStringBuilder这个类

    AbstractStringBuilder和String都继承自Object这个类

    2.String是不可变类,StringBuffer, StringBuilder是可变类

    String类没有append()、delete()、insert()这三个成员方法,而StringBuffer和StringBuilder都有这些方法

    StringBuffer和StringBuilder中的append、delete、insert这几个成员方法都是通过System类的arraycopy方法来实现的,即将原数组复制到目标数组

    3.执行速度

    在执行速度上,String < StringBuffer < Stringbuilder 。

      String < StringBuffer

      这是因为String类是不可变的,即字符串常量,所以每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。这就会对程序运行产生很大的影响,因为当内存中的无引用对象多了以后,JVM的GC进程就会进行垃圾回收,这个过程会耗费很长一段时间,因此经常改变内容的字符串最好不要用 String类的对象。而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。

      String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢

      StringBuffer < StringBuilder

      StringBuffer是线程安全的,而StringBuilder是非线程安全的

      StringBuffer类中的大部分成员方法都被synchronized关键字修饰,而StringBuilder类没有出现synchronized关键字

      在运行速度方面StringBuffer<StringBuilder,这是因为StringBuffer由于线程安全的特性,常常应用于多线程的程序中,为了保证多线程同步一些线程就会遇到阻塞的情况,这就使得StringBuffer的运行时间增加,从而使得运行速度减慢;而StringBuilder通常不会出现多线程的情况,所以运行时就不会被阻塞,运行速度也自然就比StringBuffer快了。

    文章来源:

    https://www.cnblogs.com/Wilange/p/7570633.html

    https://www.cnblogs.com/Wilange/p/7572125.html

  • 相关阅读:
    MySQL的备份和恢复-mysqldump
    MySQL日志功能详解
    MySQL查询缓存
    MySQL的用户管理
    doc常用命令
    记录mysql语句
    centos常用命令
    centos 7.6
    centos6 常用命令
    centos6.8 安装软件
  • 原文地址:https://www.cnblogs.com/ooo0/p/11344927.html
Copyright © 2020-2023  润新知