y=x;操做的是y对象的引用=x对象的引用
这时候只是引用的值变了,这个引用的值是局部的,在main里面其实b的引用没有变,还是“B”的引用.
所以说:operate()只返回对象值所在的引用。你可以在y=x;后面操作y这个值,变化的其实是x,just like:y.append(x);
结果pirnt出来的是ABAB,B,就说明这个问题了我是这样理解的,不知对不?

解决方案 »

  1.   

    鱼片正解
    你可以在方法中打印 以便看的清楚
    static void operate(StringBuffer x,StringBuffer y){
         x.append(y);
         y=x;
             System.out.println(x+","+y);
       }
    这时候应该是 AB,AB鱼片是82年5月12号的  
    我是26号的  呵呵
      

  2.   

    AB,B正解,楼主搜索一下这里关于传值,传引用的帖子就会明白的。
      

  3.   

    en,
    static void operate(StringBuffer x,StringBuffer y){
         x.append(y);
         y=x;
       }
    我是这样理解的。operate中的x ,y 实际上只是主函数中x,y中的一个引用,指向同一块内存。。
    在operate 中改变的x引用的内存值,而operate 中的y的引用改为指向x了,并没改变主函数中y的内存。
      

  4.   

    AB,B
    因为形式参数不能改变实在参数的值,如果换成int,你一定可以理解.
    这里StringBuffer是一样的,传递的是一个引用,在函数里面会有一个新的引用的副本,这个引用和实参
    指向同一个对象.
    相当于
    StringBuffer temp=b;
    temp=a;
    这里b当然不会变了
      

  5.   

    我的理解是这样的,不知道对不对在main()方法里面:
    a引用'A'
    b引用'B'
    然后作为参数传递给operate()方法在operate()方法里面:
    x引用'A'
    y引用'B'经过x.append(y)以后
    x引用'AB'
    y引用'B'再经过y=x以后
    x引用'AB'
    y引用'AB'那么x,y的引用是怎么传递到main()里面的a,b去的?
    关键是这里想不太明白
      

  6.   

    哦,理解了
    operate()中,x.append(y),实际上是改变了x引用的内容,由于a跟x引用同一个对象,所以a的引用也会随之改变
    而y=x只是改变operate()中y的引用,这个是局部的,不会影响到main()中b的引用
    所以结果是AB,B这样理解应该对了吧
      

  7.   

    x.append(y)实际上是在操作x所引用的实体即A所在的内存区域,不是X的!而Y=X只是让Y引用指向A,并没有改变原引用,即b的引用.y是局部的,方法一结束,x,y就被释放了,a,b的原值不会变化,只是方法改变了实体A为AB
      

  8.   

    AB,B
    我的理解是这样的,不知道对不对
    x引用的是a,y引用的是b
    当方法的x.append(y)调用时,那么他会改变a内存中的值,也就是相当于赋值给了a,调用完后释放内存。
    那么x的值还是a原来的哪个值把再它赋给y。