zoukankan      html  css  js  c++  java
  • 比较 String,StringBuffer,StringBuilder

    1)三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

    2)String <(StringBuffer,StringBuilder)的原因

        String:字符串常量

        StringBuffer:字符串变量

        StringBuilder:字符串变量

      从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码:

      String s = "abcd";
      s = s+1;
      System.out.print(s);

        我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC(垃圾回收器)回收掉,可想而知这样执行效率会有多低。

      而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。

           StringBuffer是线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

           StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。

      Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuilder(或StringBuffer)类及其append 方法实现的。

     

     

  • 相关阅读:
    技嘉Z390 AORUS MASTER+酷睿I9超频5.0GHz教程
    USDT
    Scopus数据库简介
    windows server 2016 安装网卡驱动
    solr配置同义词,停止词,和扩展词库(IK分词器为例)
    Solr 数字字符不能搜索的一个问题
    solr添加中文IK分词器,以及配置自定义词库
    SQL Server表分区(转)
    税改后每月个人所得税逐月增加
    IIS Express总结
  • 原文地址:https://www.cnblogs.com/syjp/p/10360532.html
Copyright © 2011-2022 走看看