一道面試題:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer

前幾天又看到這個面試題,再次看看java

public  class  Jtest{
       public  static  void  main(String[] args) {
             StringBuffer a= new  StringBuffer ( "A" ); 
             StringBuffer b= new  StringBuffer ( "B" );
             oper(a,b);
             System.out.print(a+ "," +b);
         }
       static  void  oper(StringBuffer c,StringBuffer d){
           c.append( "B" );   
           d=c;
       }
}

------輸出結果是什麼?面試

此題關鍵就在於 oper(c,d) 方法,這個方法到底作了什麼,怎麼結果就和想的不同呢?
那麼,就來看一下這個方法作了什麼。
app

上代碼:spa

package test;
public class Jtest{
      public static void main(String[] args) {
           StringBuffer a=new StringBuffer ("A"); 
           StringBuffer b=new StringBuffer ("B");
           //取代 oper(a,b) start;
              StringBuffer c;
              StringBuffer d;
              c = a; //c的地址指向了a,此時 c 的值爲"A";
              d = b; //d的地址指向了b,此時 d 的值爲"A";
              c.append("B"); //在c(a)的地址值變爲 「AB」
            d=c; // d的地址指向了c,也就是指向了a,**關鍵就在這裏了**,那麼能夠看到,這個過程當中根本就沒對b作任何操做,
            //就好像gg(d)路過一mm(b),說:這mm(b)不錯,而後發現前面有個更有吸引力的mm(c)而後就見異思遷了,而後拿了一朵花("B")給mm(c(a))了,,因此mm(b)壓根就不知道什麼狀況,沒參與
           // so, b 仍是b("B") , a已不是a("A"),二是a("AB")
            //取代 oper(a,b) end; 
            System.out.print(a+","+b);
      }
      static void oper(StringBuffer c,StringBuffer d){
          c.append("B");   
          d=c;
          //一開始的想法是這樣的,c = a; d= b; 那麼 c.append("B");後 c=「AB」,d=c = "AB",實際上並非數學中的簡單等價傳遞
      }
}
相關文章
相關標籤/搜索