public class Test {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A ");
        StringBuffer b = new StringBuffer("B ");
        operate(a, b);
        System.out.println(a + ", " + b);
    }
    
    public static void operate(StringBuffer x, StringBuffer y) {
        x.append(y);
        y = x;
    }    
}
答案是 AB,B  
如何解释呀????

解决方案 »

  1.   

    java方法参数传递只有1种。 就是值传递。
    y = x; 虽然在方法里y的地址变成了x 但出了函数y还是y,也就是B。而x是改变了x里面的值。 
    如果你会C就好理解了。 x和y都用值传递,传了指针。
    在operate里,
    x指针的内容被改了。
    y指针的地址改了。出了operate方法后,
    x的内容被改了, y由于是值传递又恢复y自己了。
      

  2.   

    x和a指向同一个地址,x改变地址中的内容,所有a的内容为A B,y和b开始指向同一个地址,在方法中, y = x;只是改变y的指向,而b所指的内容并没有改变!!
      

  3.   

    函数中,对形参x是直接调用其所引用对象的 append 方法,变化将直接作用于实参a。而对于形参y,只是重新赋值以更换了引用对象(地址),这种变化完全跟实参b无关。
      

  4.   

    这是一个很常见的问题。在java中只有值传递。对于传递的对象,只会改变内容,而不会改变其引用。如果你在operator方法中打印下结果,发现引用发生了变化,但是传递回来之后根本就没有变。好好体会下什么是值传递就会明白了
      

  5.   

    java中只有值传递,只会改变形参的内容,而不会改变其引用