代码如下
public static void main(String[] args)
{
              StringBuffer a=new StringBuffer("A");
              StringBuffer b=new StringBuffer("B");
     
              op(a, b);

     System.out.print(a+","+b);   static void op(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;

}
问题:输出为什么不是AB,AB而是AB,B

解决方案 »

  1.   

    静态方法里面的stringBuffer y 这个引用只是引用b的一个副本,它的改变不会影响b. 但是由于x跟a指向同一个对象,所以修改x指向的对象,也就对a指向的对象进行了修改.  
      

  2.   

    lz还是对Java的参数传递不清楚。Java中只有传值,没有传引用。所以a的内容变化了,b没有变化。
      

  3.   

    我翻了下书,应该是这样的。
    有两种类型的参数:一种是基本数据类型;一种是对象引用(传进来的是对象引用的拷贝)
    有以下特性:
    1。一个方法不能修改基本数据类型参数
    2。可以改变对象参数的状态
    3。不能让对象参数引用一个新对象。
    x.append(y);这里就是第二点吧,可以改变对象参数的状态
    y=x;这就是第三点,不能让对象参数引用一个新对象,不能让y引用x