StringBuffer和StringBuilder

字符串相关的类基本上在java.lang包
String    非常特殊的类 可以像常量一样创建对象
        String str = "abc";    //str是个对象 存储的是char[] value 数组的值是"abc"
        String的不可变特性 因为 private final char[] value
            所以频繁修改其内容的时候 性能不好
1.所属的包 java.lang包
2.默认继承Object类
   实现接口Serializable CharSequence Comparable
3.对象的构建
    常量的声明方式
    无参数构造方法
    有参数构造方法byte[] char[]

StringBuffer/StringBuilder
1.所属的包 java.lang包
2.默认继承Object类 实现接口Serializable Appendable CharSequence
    没有CompareTo()方法
    含有一个String没有的方法 append(); //拼接
3.特性 ---> 表现为可变字符串 --->表现在长度和内容 ---> char[] value;---> 可以动态扩容
4.对象的构建
    无参数构造方法
        构建一个默认长度为16个空间的对象 char[]
            StringBuilder builder = new StringBuilder();
    有参数构造方法
        利用给定的参数 构建一个自定义长度空间的对象 char[]
            StringBuilder builder = new StringBuilder(20);
        利用带String参数的构造方法 默认数组长度字符串再加上16个
            StringBuilder builder = new StringBuilder("abc"); //3+16=19
5.StringBuilder中的常用方法
    append();    //最主要的方法 频繁的拼接字符串的时候使用此方法 以提高性能
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++
        String str1 = "a";
                long time11 = System.currentTimeMillis();
        for(int i = 1;i<200000;i++){
            str1+="a";
        }
        long time12 = System.currentTimeMillis();
        System.out.println(time12-time11);    //2162
    
        String str2 = "a";
        long time21 = System.currentTimeMillis();
        for(int i = 1;i<200000;i++){
            str2+="a";
        }
        long time22 = System.currentTimeMillis();
        System.out.println(time22-time21);    //1746

        StringBuilder str3 = new StringBuilder("a");
        long time31 = System.currentTimeMillis();
        for(int i = 1;i<200000;i++){
        str3.append("a");    
        }
        long time32 = System.currentTimeMillis();
        System.out.println(time32-time31);    //6
        }
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ensureCapacity(int minimumCapacity);    //确保底层数组容量够用
    capacity(); //返回底层那个数组的容量
    length(); //长度 返回有效元素的个数
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++
        StringBuilder builder = new StringBuilder("abcdefg"); // capacity 7+16
        System.out.println(builder.capacity());    //底层的数组的容量 23
        System.out.println(builder.length());    //长度 有效元素的个数 7
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++
    setLength(int newLength) //设置字符串有效元素的个数(不安全)

    char = charAt(int index);
    setCharAt(int index,char value) //将index位置的字符改为给定的value

    int = codePointAt(int index);
    String = substring(int startIndex);    //截取index [startIndex,this.length)
    String = substring(int startIndex,int endIndex);    //截取index [startIndex,endIndex)

    (StringBuilder = )delete(int startIndex,int endIndex); //无返回值 将对象的 index [startIndex,endIndex) 删除
        //StringBuilder类中的独有方法
    (StringBuilder = )deleteCharAt(int index);    //删除给定index上的字符

    int = indexOf(String str)
    int = indexOf(String str,int fromIndex)
    int = lastIndexOf(String str)    //从后往前找
    int = lastIndex(String str,int fromIndex)

    (StringBuilder = )insert(int index,E e)    //很多很多重载 将参数e作为String插入index位置
    (StringBuilder = )replace(int start,int end,String str) //将index [start,end) 上的字符串替换为str
    (StringBuilder = )reverse() //倒叙

    String = toString() //将对应Stringbuilder对象构建为String返回
    trimToSize() //去掉容量当中不用的容量去掉 变成length长度的数组 ---> capacity = length 

===============================================================
总结
1.不一定需要StringBuilder类 当需要String频繁拼接修改字符串信息的时候才用的
    因为StringBuilder底层数组是可变的 提高了性能
2.常用方法
    与String类不同的都有方法
3.笔试中经常考察的知识点
    1.String所属的包 继承关系 实现接口
        java.lang包 继承Object类 实现Serializable CharSequence Comparable
    2.String构建方法
        常量声明法 构造方法
    3.String对象内存结构
    4.String的不可变特性
        长度 内容
    5.String的常用方法 --- 与StringBuilder的区别
        concat()
        toUpperCase()
    6.String和StringBuilder的区别 | String和StringBuffer的区别
        String是不可变字符串
            有一个Comparable接口
            不可变体现在长度和内容
            有StringBuilder没有的方法 concat() compareTo() toUpperCase()
        StringBuilder是可变字符串
            有一个Appendable接口
            没有final修饰 是可变字符串 在底层可以进行数组扩容
            有String没有的方法 append() insert() delete() reverse()
    7.StringBuffer和StringBuilder的不同
        两个类的方法使用几乎一致
        StringBuffer是早期版本 1.0
        StringBuilder是后来的版本 1.5
        早期版本 线程同步    安全性较高 执行效率相对较低
        后期版本 线程非同步 安全性较低 执行效率相对较高
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值