1、StringBuilder是可变字符序列,线程不安全的,效率高
2、StringBuffer线程安全的,效率低
3、String 是不可变字符序列
代码如下:
StringBuilder sb=new StringBuilder("a");
for (int i = 0; i < 10; i++) {
sb.append(i);
}
System.out.println(sb);
问题1:上面的代码产生了几个对象?
产生了2个对象,字符串"a"和sb对象
如果换成String将会产生12对象,因为String 是不可变的。
String没有改变值本身,而是创建新的对象!
StringBuilder sb=new StringBuilder(); //内部建立的char[]长度为16(默认值)
StringBuilder sb1=new StringBuilder("0");//内部建立的char[]长度为17(长度为形参.length+16)
StringBuilder sb2=new StringBuilder(32);//内部建立的char[]长度为32(长度就是传进去的数值)
问题2:创建的数组长度有限,如果append的String长度超过了定义的长度,怎么办?
源码是通过建立一个新的数组长度是旧数组的2倍,然后将旧数组的内容赋值进去,然后添加新内容。
问题,String为什么是不可变的,而StringBuilder是可变的?
网友评论