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

简单题目请教..
public   class   A   {
      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;
  }
}

最后的输出是AB,B
可是我觉得   x.append   (y);改为x   =   x.append   (y);才应该输出是AB,B啊...
哪位说下原因,先谢谢了...

------解决方案--------------------
x.append (y); 已经对X进行了改变,所以不必再显式地给X赋值了.其它如replace也一样.
------解决方案--------------------
LZ想弄明白这样的问题,从头到尾仔细分析。
首先从main方法入手。
StringBuffer a = new StringBuffer ( "A ");和StringBuffer b = new StringBuffer ( "B ");
new了a和b两个对象,通过operate传递给了operate方法。在此方法中x.append (y);也就是说对象有了实质的改变:对象a通过 x.append (y);又新增了对象B中的“B”,此时对象a变成了AB。
这道题的具体是看参数的传递。任何参数的传递其实都是传递对象的副本。而x.append (y);其实是改变了对象,而不是改动了副本。

------解决方案--------------------
正如 shuai45(付出总有回报,要做就做最好.) 所说,这是一个形参与是实参的问题。StringBuffer是一个对象,a 作为参数传入operate方法,在operate中改变,而x相当于C中的指针,其中存储的是a的地址,x=y不会影响a的内容。