public class Aa {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("good");
StringBuffer s2 = new StringBuffer("bad");
test(s, s2);
System.out.println(s);// 9
System.out.println(s2);// 10
} static void test(StringBuffer s, StringBuffer s2) {
System.out.println(s);// 1
System.out.println(s2);// 2
s2 = s;// 3
s = new StringBuffer("new");// 4
System.out.println(s);// 5
System.out.println(s2);// 6
s.append("hah");// 7
s2.append("hah");// 8
}
}问下9 10的输出为什么是goodhah和bad? 请给个详细的说法谢谢!!

解决方案 »

  1.   

    LZ好好看一下java的参数传递吧,弄懂参数传递你就能明白这个问题了
      

  2.   

       我感觉9 10应该输出newhah  goodhah 但是....  不晓得为什么啊  困惑
      

  3.   

    1.首先test()方法中传的不时值,而是对象的引用(可理解为C语言中的指针)
    2.方法中s2 = s 将s2的引用改为了s(即指向了s的地址,成了s的引用);
      s = new StringBuffer("new")则将s的引用改变了,不再是以前那个对象,
      所有后面的s.append("hah") 是改变新的对象的值,s2.append("hah")实质时改变
    以前的s指向的对象
      

  4.   

    s2 = s
    s的地址给了s2,实际上后面的s2就是s.
    而后来s new了,不指向原地址
    所以没有修改以前s以前s引用地址的值.