• java之StringBuider与StringBuffer


    一、StringBuider与StringBuffer

    StringBuider与StringBuffer类比String更加灵活,只要使用字符串的地方,都可以使用StringBuider与StringBuffer类。三者的共同之处都是 final 类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用。


    二、StringBuider

    1)构造方法

    StringBuider()                                        构建容量为16的空字符串构建器

    StringBuider(int capacity)                    构建指定容量的构建器

    StringBuider(String s)                          构建指定字符串的构建器


    2)普通方法

    append(char[] data)                                 StringBuider     //追加字符数组到构造器

    append(char[] data, int offset, int len)    StringBuider     //追加data的之数组到构造器

    append(aPrimitveType v)                        StringBuider     //将基本类型作为字符串追加到字符串构造器

    append(String s)                                      StringBuider     //追加一个字符串到字符串构造器

    delete(int startIndex, int endIndex)          StringBuider     //删除从startIndex到endIndex-1的字符

    deleteCharAt(int index)                            StringBuider      //删除指定索引位置的字符

    insert(int index,char[] data, int offset,int len)  StringBuider //指定索引插入数组data的之数组到构造器

    insert(int offset, char[] data)                     StringBuider      //向构造器的偏移位置插入data数组

    insert(int offset, aPrimitveType v)            StringBuider     //向构造器的偏移位置插入一个转换为字符串的数值

    replace(int startIndex, int endIndex, String s)  StringBuider //从startIndex到endIndex-1的位置的字符替换为指定的字符串

    reverse()                                                    StringBuider     //倒置构建器的字符串

    setCharAt(int index, char ch)                  void                    //将索引的字符更新为新字符

     以上的返回值都是该对象本身的引用。

    实例:

                 StringBuilder stringBuilder=new StringBuilder();
                 stringBuilder.append("a");
                 stringBuilder.append('a');
                 stringBuilder.delete(0, 2);
                 stringBuilder.reverse();
                 stringBuilder.insert(stringBuilder.length()-1, "e");

    3)其他方法

    charAt(int index)      char                                                    //获取指定索引的字符

    toString()    String

    capacity()   int                                                                     //返回构造器的容量

    length()       int                                                                     //字符串构建器的实际长度

    setLength(int newLength)                                                  //设置构建器的新字符数

    substring(int startIndex)   String                                        //返回从startIndex的子字符串

    substring(int startIndex, int endIndex)   String                 //返回从startIndex到endIndex的子字符串

    trimToSize()                                                                        //减少字符串构建器的存储大小


            setLength(int newLength)  方法设置字符串的构建长度,如果newLength大于等于当前的长度,则字符串构建器会自动追加足够的空字符('u0000'),使其长度length变成newLength,如果newLength小于字符串构建器的长度,则字符串构建器会被截取到恰好等于newLength的个数。newLength必须大于等于0。


           trimToSize()方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。


    三、StringBuffer

           StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。


            StringBuffer 与StringBuilder 相似,主要操作有 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端,而 insert 方法则在指定的点添加字符。


    四、String、StringBuffer 与 StringBuilder

    1) String类是final类,String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。在早期的JVM实现版本中,被final修饰的方法会被转为内嵌调用以提升执行效率。而从Java SE5/6开始,就渐渐摈弃这种方式了。因此在现在的Java SE版本中,不需要考虑用final去提升方法调用效率。只有在确定不想让该方法被覆盖时,才将方法设置为final。


    2) StringBuffer 与 StringBuilder 功能相似,只是 StringBuffer 是线程安全,可以不需要额外的同步用于多线程中。StringBuilder 是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比 StringBuffer 快。二者之间的共同点都可以通过append、insert进行字符串的操作。


    3) String 实现了三个接口:Serializable、Comparable<String>、CharSequence,而 StringBuffer 及 StringBuilder 只实现了两个接口Serializable、CharSequence,相比之下 String 的实例可以通过 compareTo 方法进行比较,而其它两个就不可以。


    4) 对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。
    和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象
    StringBuilder类在Java 5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。


    5) String对于直接相加字符串,效率很高,在编译器便确定了它的值。对于间接相加(即包含字符串引用),效率要比直接相加低,因为在编译器不会对引用变量进行优化。


    6) String、StringBuilder、StringBuffer三者在修改下的执行效率:
    StringBuilder > StringBuffer > String


    字符串相加操作或者改动较少的情况下,建议使用 String。字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer。





  • 相关阅读:
    ionic框架
    第3课
    第7课
    第6课
    第5课
    第4课
    第3课
    第2课
    第2课
    第1课
  • 原文地址:https://www.cnblogs.com/maokun/p/6710822.html
Copyright © 2020-2023  润新知