• 29. StringBuilder


    1.字符串变量、StringBuffer、StringBulid的区别:
            
       字符串是一个常量,不能被修改
       字符串一旦被修改,那么会再创建一个对象,浪费空间
            
       而StringBuffer字符缓冲类是一个容器,它对它进行增删改操作,非常方便
            
       StringBuilder类提供一个与 StringBuffer兼容的 API,但不保证同步
            
       所以字符串频繁修改时我们推荐使用字符串缓冲类
            
    2.StringBuilder与StringBuffer的相同点和不同点
       1)相同点:
           a.具有相同的方法
           b.都是字符串容器增删改操作,非常方便
            
       2)不同点:
           a.StringBuilder用在多线程时不安全,但比StringBuffer的运行效率高
           b.StringBuffer同在多线程时安全,但是比StringBuilder的运行效率低
           c.StringBuffer是JDK1.0发行的,StringBuilder是JDK1.5发行的
            
           推荐使用StringBuilder,因为在我们实际开发中同时对一个字符串处理的情况很少
           如果真的发生多线程问题时还是推荐使用StringBuffer

       总结:

            如果文本(字符串)不会改变就用String类,因为String对象是不可变的。
            如果文本(字符串)可以改变并且在单线程中访问,使用StringBuilder。
            如果文本(字符串)可以改变并且在多线程中访问,使用StringBuffer。
            
            
    3.StringBuilder
           查看源代码,我们可以发现此类是用字符数组来储存字符的,默认的空间是16个字符
           注意:它可以储存任意类型的数据,因为它有可以添加任何类型数据的append方法重载
            
           此类的构造函数:
                StringBuilder()    构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。
                
                    注意:如果我们使用append方法添加了大于16个字符的数据,那么容器的大小会增长一倍(其实是一倍加2),
                        但是如果没有添加大于16个字符的数据,容器的大小还是16,而并不是添加字符的长度
                           
                StringBuilder(CharSequence seq)     构造一个字符串生成器,包含与指定的 CharSequence 相同的字符。(CharSequence?)
                
                StringBuilder(int capacity)       构造一个其中不带字符的字符串生成器,初始容量由 capacity 参数指定。
                    
                    注意:如果我们在创建容器时给它指定容器的大小,再使用append方法添加数据时,
                        如果超过了我们指定容器大小,那么容器大小会增长一倍(其实是一倍加2)
                           
                StringBuilder(String str)         构造一个字符串生成器,并初始化为指定的字符串内容。
                    
                    注意:如果我们在创建对象的时候,初始化字符串内容那么容器的大小为  字符串的长度加上16
            
                
    4.StringBuilder的常用函数列表
            
            添加:
                append(boolean b)          可以添加任何类型的数据到容器中
                insert(int offset, double d)    指定插入的索引值,并插入对应的数据(也可以添加任何类型数据)
                
            删除:
                
                delete(int start , int end )     删除指定开始和结束索引的数据(包头不包尾)
                deleteCharAt(int index)        根据指定的索引删除一个字符
                
            修改:
            
                replace(int start , int end, String str)    修改指定开始和结束位置的数据
                reverse()                    翻转容器的内容,例如:abc-->cba
                setCharAt(int start , char ch)         把指定索引值的字符替换指定的字符
                ensureCapacity(int minimumCapacity)       修改容器的大小
                
            查询:
            
                substring(int start , int end)       截取指定位置的字符
                indexOf(String str, int fromIndex)     根据指定的位置向后查找第一次出现指定字符的索引值
                lastIndexOf(String str, int fromIndex)   根据指定的位置向后查找最后一次出现指定字符的索引值
                capacity()                   查询容器的大小
                length()                  查询内容的长度
                CharAt(int index)              查询指定索引位置的一个字符
                toString()                 把容器内容转换成字符串输出

  • 相关阅读:
    转:JMeter5的If Controller操作解析
    .NET Core优秀的应用逻辑分层框架设计
    socket阻塞导致拿不到信息
    2018年开始了,我们还是说说2017吧
    PHP 学习 遇到坑的第一章
    记一次高并发情况,服务器和代码修改过程记录。
    IIS 提高连接的并发数,和CPU的使用率。
    2017年总结
    在 safari 浏览器 onclick 出现延迟的现象
    微信JS-api 注意事项
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8921867.html
Copyright © 2020-2023  润新知