s1之所以输出不是java,是因为在show中执行的s1=s2;并不会改变实参s1的内容,因为改变的只是引用。

解决方案 »

  1.   

    package p1.stringbuilder.test;public class StringBuilderTest {
        static StringBuilder s1;
        public static void main(String[] args) {        /*StringBuilder*/ s1 = new StringBuilder("hello");
            StringBuilder s2 = new StringBuilder("java");        show(/*s1,*/s2);
            System.out.println(s1+"......."+s2);    }    private static void show(/*StringBuilder s1,*/ StringBuilder s2) {        s1.append(s2);
            s1 = s2;    }
    }
    这样改动后,就能输出:
    java.......java
      

  2.   

    应为声明一个String 是放在一个叫做字符串池的内存区,这里申明一个String后就只会有一个对象,之后进行的S1=S2的赋值  只是改变了他的引用,实际上没有改变
      

  3.   

    s1.append(s2);  //改变的是s1引用对象的值,离开方法后依然有效,此时s1的值为"hellojava";
    s1 = s2;        //改变的是s1的引用值即引用对象的地址,离开方法后修改无效;