String、StringBuffer、StringBuilder三者的异同?
- String:不可变的字符序列;底层使用char[]存储
- StringBuffer:可变的字符序列 线程安全的 效率低 底层使用char[]存储
- StringBuilder:可变的字符序列 线程不安全的 效率高 (JDK5.0新增) 底层使用char[]存储
源码分析:
String str new String();
String str1=new String("abc");
StringBuffer sb1=new StringBuffer();
System.out.println(sb1.length);
sb1.append('a');
sb1.append('b');
StringBuffer sb2=new StringBuffer("abc");
- 问题1. System.out.println(sb2.length());
- 问题2. 扩容问题:如果要添加的数据底层数组放不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来的2倍+2,同时将原有的数组中的元素复制到新的数组中。
在开发中建议使用:StringBuffer(int capacity)或StringBuilder(int capacity)