美文网首页
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