public static void add(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
/**
 * @param args
 */
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
add(a,b);
System.out.println(a+","+b);
}解释输出结果

解决方案 »

  1.   

    正解:
    理论上讲,java没有什么值传递和引用传递之分,传进去的都是值 ,但是问题是,如果传入的是类的话,不是java基本类型,那么这个值就是指向该类的一个指针值 ,
    所以当参数时类的时候,就相当于引用传递。
      

  2.   

    In Java, every variable passes by value...
      

  3.   

    老问题了,5楼说得很详细了。
    正解:AB,B
      

  4.   

    当然是AB,B了 
    给你简单描述一下这个程序执行时的内存操作
     1. a,b分别指向 A,B
     2. add() x,y 分别指向 A,B
     3. x.append(y) 将A修改成AB
     4. y指向AB
     这时 a,x,y 分别指向 AB
         b指向 B
     5.释放x,y
     
     a-->AB
     b-->B
    所以输出AB,B
    不知道你明白了没?
     
      

  5.   

    既然x.append(y)能使a的值发生改变
    那么y=x为什么不能使b的值改变呢,不是一样的传的俩个StringBuffer对象么?
      

  6.   

    当然是AB,B了 
    给你简单描述一下这个程序执行时的内存操作 
    1. a,b分别指向 A,B 
    2. add() x,y 分别指向 A,B 
    3. x.append(y) 将A修改成AB 
    4. y指向AB 
    这时 a,x,y 分别指向 AB 
        b指向 B 
    5.释放x,y 
      

  7.   

    非常感谢的参与!
    经过大家的分析,我明白了java中的值传递和引用传递,谢谢大家的帮助!!!