String,StringBuffer,StringBuilder三者的异同?

String,StringBuffer,StringBuilder三者的异同?

  String:不可变的字符序列;底层使用char[]存储
  StringBUffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
  StringBuilder:可变的字符序列;jdk5.0新增线程不安全,效率高;底层使用char[]存储

   源码分析:
   String str=new String();//char[] valuenew char[0];
   String str1=new Strintg("abc");//char[] valuenew char[]{'a','b','c'}


   StringBuffer sb1=new StringBuffer();//char[] value=new char[16];底层创建了一个长度为16的数组
    System.out.println(sb1.length)//0
   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)
 */

你可能感兴趣的:(java,开发语言,后端)