求大神解答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的引用值即引用对象的地址,离开方法后修改无效;