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

关于方法作用域的问题
public   class   test4{      
    //static   String   x= "10 ";
    //static   String   m= "3 ";
    static   StringBuffer       c=new       StringBuffer( "C ");      
    static   StringBuffer       d=new       StringBuffer( "D ");
    public       static       void       main(String[]       args){      
    StringBuffer       a=new       StringBuffer( "A ");      
    StringBuffer       b=new       StringBuffer( "B ");
    test4   test=new   test4();

    String   n= "4 ";

    operate(a,b);
    test.setvalue(c);
    System.out.println(a+ ". "+b+ ", "+d);
    }
    static       void       operate(StringBuffer       x,StringBuffer       y){      
    x.append(y);
    y=x;
    //System.out.println(x+ ". "+y);      
    }
    public   void   setvalue(StringBuffer   t)
    {
        d=t;
    }
    }  
为什么结果不是AB.AB,C,而是AB.B,C?

------解决方案--------------------
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
//System.out.println(x+ ". "+y);
}
首先要搞清楚java中的傳值與傳引用

在方法里StringBuffer x,StringBuffer y
x引用a對象 y引用b對象
x.append(y);------a里面的改變了成了 'AB ',x還是引用a
y=x;--------------y的引用變為與x相同,引用a

其實到最后僅僅因為方法x.append(y)改變了對象的值,其它只是引用改變了;



------解决方案--------------------
同意楼上哥们的说法,补充几句
y一开始是指向b的,后来y=x,把x引用赋给y,y指向了a,所以原来b的值没有改变