String类

特点

     1.所有字符串的字面值常量("abc","123",..)都是一个String类的对象

     2.字符串一经初始化不可改变

       因为底层使用的是一个 final char[] value,该数组一经初始化,不可改变

     3.String str="abc";

       底层:"abc"装到底层的字符数组中value={'a','b','c'}

StringBuffer/StringBuilder

特点

    StringBuffer/StringBuilder 底层使用的是一个字符数组char[] value,往StringBuffer中添加的内容都会转换为字符添加到底层的字符数组中

     new StringBuffer(),底层开辟的字符数组长度为16,

    如果添加的元素超过16个,就会新开辟一个长度为 原有长度*2+2 的一个新的字符数组,把原有内容拷贝新数组中,把新添加的元素追加到新数组的元素的末尾

StringBuffer/StringBuidler的方法

append():

 a.不断的往缓冲区(字符数组)末尾追加字符

       b.apend()方法的返回的是追加了内容的缓冲区(原有字符数组)

       StringBuffer sb=new StringBuffer();

       sb.append("ab");//添加到底层的字符数组中char[] value={'a','b'}

       sb.append(1)//在添加到原有的字符数组中char[] value={'a','b'.'1'}

       //sb.append("ab").append(1);//因为返回的原有的StringBuffer对象,所以可以不断的调用下去

reverse():将缓冲区中所有的字符反转

toString():将缓冲区中所有的内容变成一整个字符串返回

 value:想缓冲区中添加的数据,最终都添加到value字符数组中

             char[] value

      count:缓冲区中字符的个数  

      底层:new String(value, 0, count);//将value数组,从0索引开始,count个字符转换成字符串

           例如:new String({'a','b'},0,2);//相当于转换成"ab"

StringBuffer与StringBuilder区别

    1.相同点:方法基本一致

    2.不同点:StringBuffer是线程安全的,但是效率低

             StringBuilder是线程不安全,效率高

             优先考虑StringBuilder

 d.字符串拼接

  

  String str="abc";

     str=str+"d";//str+"d"

                 //以上代码相当于:new StringBuilder("abc").append("d").toString();

                 //StringBuilder sb=new StringBuilder("abc");

                 //sb.append("d");//追加一个d

                 //sb.toString();//返回整个字符串new String({'a','b','c','d'},0,4);

                //所有的+号拼接底层都是用StringBuilder完成

                //str=str+"d";相当于:str=new String({'a','b','c','d'},0,4);

 

    String str2="abcd"//str2指向内存中的一个字符数组对象

    //str=new String({'a','b','c','d'},0,4);

    System.out.println(str2==str);//内存地址不同返回false
原文地址:https://www.cnblogs.com/xwb583312435/p/9115249.html