面试中好多次都遇到这样的问题,今天终于搞懂了...
class Test03 {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("good");
StringBuffer s2 = new StringBuffer("bad");
test(s, s2);
System.out.println(s);// goodhah
System.out.println(s2);// bad
}
static void test(StringBuffer s, StringBuffer s2) { // 此时会在方法栈中新建引用,但指向同一内存地址
System.out.println(s);// good
System.out.println(s2);// bad
//s2跟传进来的s2是两个对象,此时的s2就跟s指向的是一样的,所以在改变此时的s2或者改变s的时候也改变了s的值,而传进来的s2是没有改变的
s2 = s;
s = new StringBuffer("new");
System.out.println(s);// new
System.out.println(s2);// good
//s.append("hah");
s2.append("hah");
}
}