y的作用域,如果要得出你要的结果,代码如下:
public static void main (String [] args) {
                StringBuffer a = new StringBuffer ("A");
                StringBuffer b = new StringBuffer ("B");
                b=operate (a,b);
                System.out.println(a + "," +b);
        }
        static StringBuffer operate (StringBuffer x, StringBuffer y) {
                x.append (y);
                y = x;
                return y;
        }
  }

解决方案 »

  1.   

    强烈建议你看看这个就知道了!!!http://www.csdn.net/expert/topic/669/669868.xml?temp=1.050967E-02
      

  2.   

    因为你执行y=x时创建的是一个新的String object.
      

  3.   

    static void operate (StringBuffer x, StringBuffer y) { 
                    x.append (y); 
                    y = x; 
            } 
    你这方法只是传入参数y,但y并没有因此改变,全局变量y被这个方法内的y隐藏了,也就是说,y值没有被处理
      

  4.   

    y原是指向b,后又指向了x(a),对y的操作不会影响到b
      

  5.   

    你y=x是的y和参数y是不同的啊,这个y等于是新建的String y啊
      

  6.   

    public class Foo { 
            public static void main (String [] args) { 
                    StringBuffer a = new StringBuffer ("A"); 
                    StringBuffer b = new StringBuffer ("B"); 
                    operate (a,b); 
                    System.out.println(a + "," +b); 
            } 
            static void operate (StringBuffer x, StringBuffer y) { 
                    x.append (y); 
                    y = x;
                    y.append(" test");
            } 

    AB test,B
      

  7.   

    public void operate (StringBuffer x, StringBuffer y) {
                    x.append (y);
                    y = x;
                    System.out.println("y:"+y);
                    System.out.println("x:"+x);
            }
    public static void main (String [] args) {
                    StringBuffer a = new StringBuffer ("A");
                    StringBuffer b = new StringBuffer ("B");
                    b=operate (a,b);
                    System.out.println(a + "," +b);
            }
    在函数内部输出的
    y:AB
    x:AB
    在主函数中输出的是AB,B 
    这就是说结果传递的只有b,a并没有被传递。
    这是变量的传值与传址的区别
      

  8.   

    这个问题,和你前面那个问题同出一辙。下面总结了在Java程序设计语言中可以利用方法参数做到河不能做到的几种情况:
    1。方法不能下该基本类型的参数。
    2。方法可以改变对象参数的状态。
    3。方法不能使一个对象参数指向一个新的对象。对应的例子为:
    //1.
    public static void tripleValue(double x){ 
        x = 3* x;
    }
    //2.
    public static void tripeSalary(Employee x) {
        x.raiseSalary(200);
    }
    //3.
    public static void swap(Employee x, Employee y) {
        Employee temp = x;
        x = y;
        y = temp;
    }
    你的程序属于第三种,即不能使一个对象参数指向一个新的对象。如果你能找到《最新java2核心技术 卷I: 原理》的话看看page119现在不是怎么能弄出最后的结果,而是先要理解实现机制。看看那本书,讲的很清楚。我确信你看了以后,对这方面不会存在问题,也就知道自己的程序该怎么设计和实现。