日期:2014-05-20  浏览次数:20728 次

求大神解答StringBuilder的一个小问题
package p1.stringbuilder.test;

public class StringBuilderTest {
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;

}

}

s1输出为什么不是java啊?

------解决方案--------------------
s1之所以输出不是java,是因为在show中执行的s1=s2;并不会改变实参s1的内容,因为改变的只是引用。
------解决方案--------------------
应为声明一个String 是放在一个叫做字符串池的内存区,这里申明一个String后就只会有一个对象,之后进行的S1=S2的赋值  只是改变了他的引用,实际上没有改变
------解决方案--------------------
s1.append(s2);  //改变的是s1引用对象的值,离开方法后依然有效,此时s1的值为"hellojava";
s1 = s2;        //改变的是s1的引用值即引用对象的地址,离开方法后修改无效;