class StringBufferTest 
{
public static void main(String[] args) 
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
change(a,b);
System.out.println(a+","+b);//A
} private static void change(StringBuffer a,StringBuffer b){
a.append(b);
b=a;
System.out.println(a+","+b);//B
}
}-----------------
A和B,爲什麽結果不一樣?

解决方案 »

  1.   

    因为JAVA的参数传递是值传递。
      

  2.   

    change中的print好理解,这个时候的a.toString()="AB", b,toString()="AB";关键是main中的print, a.toString()="AB", b.toString()="B"只能认为a.append(b)确实改变了a的值, 而b=a只是将b的指针指向了a的地址,而b本身的堆中的值没有变
      

  3.   

    其實,change中的print的結果,是我不能理解的。既然只是指針指向。爲什麽b會變呢??
      

  4.   

    b=a;
    ——这一句对形参的改变,影响不了实参。a.append(b);
    ——这一个不一样,它没有直接去改变形参引用,而只是通过这个引用去修改了那个被引用的对象。而那个对象,现在恰恰是被形和实参同时引用着。