zoukankan      html  css  js  c++  java
  • String、StringBuffer、StringBuilder

    1.String、StringBuffer、StringBuilder三者的对比
    String:不可变的字符序列;底层使用char[]存储
    StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
    StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
     
    2.StringBuffer与StringBuilder的内存解析
    以StringBuffer为例:
    String str = new String();//char[] value = new char[0];
    String str1 = new String("abc");//char[] value = new char[]{'a','b','c'};
    StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];底层创建了一个长度是16的数组。
    System.out.println(sb1.length());//
    sb1.append('a');//value[0] = 'a';
    sb1.append('b');//value[1] = 'b';
    StringBuffer sb2 = new StringBuffer("abc");//char[] value = new char["abc".length() + 16];
    //问题1. System.out.println(sb2.length());//3
    //问题2. 扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
             默认情况下,扩容为原来容量的2倍 + 2,同时将原数组中的元素复制到新的数组中。
            指导意义:开发中建议大家使用:StringBuffer(int capacity) 或 StringBuilder(int capacity)
     
    3.对比String、StringBuffer、StringBuilder三者的执行效率
    从高到低排列:StringBuilder > StringBuffer > String
     
    4.StringBuffer、StringBuilder中的常用方法
    增:append(xxx)
      将指定的字符串追加到此字符序列。实现了不同类型的xxx的方法重载。
    删:delete(int start,int end)
      移除此序列的子字符串中的字符
      s.deleteCharAt(s.length()-1);
      移除此序列的子字符串中的字符
    改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
      使用给定 String 中的字符替换此序列的子字符串中的字符。
    查:charAt(int n )
      返回此序列中指定索引处的 char 值。
    插:insert(int offset, xxx)
      在指定位置插入xxx。
    长度:length();
    *遍历:for() + charAt() / toString()
    反转:reverse()
     
    关于索引:
    int indexOf(String str)
      返回第一次出现的指定子字符串在该字符串中的索引。
    int indexOf(String str, int fromIndex)
      从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
    int lastIndexOf(String str)
      返回str 在字符串最后一次出现的位置。
    int lastIndexOf(String str, int fromIndex)
      返回 String 对象中子字符串最后出现的位置。
     
    关于字串
    String substring(int start)
      返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
    String substring(int start, int end)
      返回一个新的 String,它包含此序列当前所包含的字符子序列。
     
     
  • 相关阅读:
    spring事物管理五种配置方式
    解决html中内部元素mouse事件干扰
    普通类获取ApplicationContext(附带servletContext)的方法
    SQL学习基础知识
    vs 工具技巧手册
    wcf client与webservice通信备注
    BackgroundWorker学习一
    silverlight发布注意事项
    将wcf 以webservice的方式调用
    Visual Studio 2005 Team Foundation Server (TFS)单服务器安装记
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12825668.html
Copyright © 2011-2022 走看看