有这么一段程序:
String a=new String("a");
String b="b";
String c=a+b;
StringBuffer strBuf=new StringBuffer();
strBuf.append("a");
strBuf.append("b");
String d=strBuf.toString();
StringBuilder strBuilder=new StringBuilder();
strBuilder.append("a");
strBuilder.append("b");
String e=strBuilder.toString();
请问以上程序片段中c、d、e的字符串的创建各有什么不同?

解决方案 »

  1.   

    这个应该主要问的是StringBuffer和StringBuilder的区别,一个是线程安全的。其它嘛自由发挥了
      

  2.   


    方法1:
    创建String对象"a"
    创建新的String对象a,复制拷贝了上一个String对象的值
    创建String对象"b"
    创建新的String对象引用b,指向上一个String对象的实例
    新建StringBuilder对象x(JDK1.5之前是StringBuffer)
    x.append(a)
    x.append(b)
    c=x.toString()方法2:
    新建StringBuilder对象strBuf
    strBuf.append("a") ("a"已经在常量池中,无需创建新对象)
    strBuf.append("b") ("b"已经在常量池中,无需创建新对象)
    d=strBuf.toString()方法3的实际流程基本等同于方法2,主要区别是StringBuffer是线程安全的,而StringBuilder不是,所以StringBuffer更安全而StringBuilder更快。
      

  3.   

    应该是StringBuffer和StringBuilder的区别吧。希望楼主面试顺利
      

  4.   

    按照楼主说的,如果是要说出jvm的原理呢,谁有更好的解释
      

  5.   

    jvm的原理的话就可以说堆栈了啊