JavaSE常用类之String、StringBuffer、StringBuilder的区别
String 、StringBuffer 、StringBuilder 的区别
String : 不可变的字符序列;底层使用 char[ ] 存储
StringBuffer : 可变的字符序列;线程安全的,效率低;底层使用 char[ ] 存储
StringBuilder : 可变的字符序列;线程不安全,效率高;底层使用 char[ ] 存储
源码分析
String str = new String(); //char[] value = new char[];
String str1 = new String("abc"); //char[] value = new char[]{'a', 'b', 'c'};
StringBuffer sb1 = new StringBuffer(); //char[] value = new char[16]; 底层创建了一个长度16的数组
sb1 = append('a'); //value[0] = 'a';
sb2 = append('b'); //value[1] = 'b';
StringBuffer sb2 = new StringBuffer("abc"); //char[] value = new char["abc".length + 16];
//StringBuilder 与 StringBuffer 同理
问题 1 : System.out.println(sb2.length());
答案:3,这里不是16,只是在底层创建了一个长度为 16 的数组
问题 2 : 扩容问题:如果要添加的数据长度超过 16 ,则需要扩容底层数组。
默认情况下,扩容为原来容量的两倍 + 2,同时将原来数组的元素复制到新的数组中
指导意义:开发中建议使用 StringBuffer(int capacity) 或 StringBuilder(int capacity)
String的运行速度最慢

浙公网安备 33010602011771号