美文网首页
StringBuilder

StringBuilder

作者: 寂静的春天1988 | 来源:发表于2019-01-11 21:43 被阅读0次

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是可变的?

相关文章

网友评论

      本文标题:StringBuilder

      本文链接:https://www.haomeiwen.com/subject/qmatdqtx.html