static void aMethod(StringBuffer sf1,StringBuffer sf2)
    { 
sf1.append(sf2); 

sf2 = sf1; 

System.out.println(sf1);
System.out.println(sf2);
    
    
    } 

public static void main(String[] args)

StringBuffer sf1 = new StringBuffer("A");
        StringBuffer sf2 = new StringBuffer("B"); 
        aMethod(sf1,sf2); 
       System.out.println(sf1 + " :" + sf2);
    }
为什么最后打印出 AB:B ,调用method后,不是sf2 = sf1 都指向AB吗,为什么不是AB:AB,
跪求答案

解决方案 »

  1.   

    sf2 = sf1;
    是这句代码搞的鬼!
    但是具体的我也不清楚、等候大牛!
      

  2.   

    JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).
    你这个例子应该是按引用传递。
      

  3.   

    对啊,这是按引用传递,sf2=sf1后,sf2也指向AB了啊,怎么会输出B呢
      

  4.   

    在aMethod中,sf2=sf1后,sf2也指向AB了,
    因为是引用传递,aMethod结束后,sf2还是指向B。
      

  5.   

    传入方法开始后,sfl和sf2和main里的引用的地址都是一样的,
    sf1.append(sf2);  因为是stringbuffer引用的地址不会变,直接在最后加字符串,所以main里的sf1
    的值也会加上sf2
    sf2 = sf1;  sf2已经指向了sf1的地址了,而main里的还是指向了原来的地址,因此会出现AB:B
      

  6.   


    这是不可能的,因为是应用传递,所以方法体里对应用的操作会同步到main中,除非像8楼说的,sf2=sf1的等号切断了他们的联系