怎么没有人?
载调用change(A)的时候,是传递的引用A还是传递的是A的一个拷贝?
如果是传递的引用A,那么为什么change(A)没有回传,没有改变A所指向的对象,
如果传递为拷贝,那么为什么能够在change(A)里面改变A的对象??
  是不是说仅仅能够改变参数指向的对象,但是不能改变该引用???

解决方案 »

  1.   

    liukuncn(咖啡泡JAVA)说的对,实际上A没变。
    chang()产生一个原指向A,后指向B的引用,最后被回收了。
      

  2.   

    不能改变对象在内存中的地址。??
    如果直接A=B
    那么此时是把B所指向的对象付给A,还是说把B应用付给A??
      

  3.   

    int i=1
    void m(int a){
       i=a;
       System.out.println(i);//如果a=2,这里显示2
    }
    void m1(){
       System.out.println(i);//这里显示1
    }
      

  4.   

    谢谢详细的答案,
     你说的例子是传递的基本数据类型!
    class my
    {
    int i=0;
    }
    my A=new my();
    my B=new my();
    void Achange(my rr)
    {
      rr.i=5;
    }
    void Bchange(my rr)
    {
      rr=B;
    }
    现在:
    Achange(B);
    Bchange(A);
    那么B改变了,但是A没有变为B;
    如果直接A=B,那么改变了。
     如果说载方法内有效果,那么在执行这一段代码的时候,是不是说A曾经也改变为B
    了,但是函数结束后,又变为原来的了。
     objectA   objectB—-(内存中的对象)
       |          |
       |          |
      引用A     引用B
    那么Achange(my)改变了参数所指向的对象(没有改变引用(内存地址))
    那么Bchange(my),用B来赋值给A,也就是说让A也指向了objectB
      

  5.   

    谢谢详细的答案,
     你说的例子是传递的基本数据类型!
    class my
    {
    int i=0;
    }
    my A=new my();
    my B=new my();
    void Achange(my rr)
    {
      rr.i=5;
    }
    void Bchange(my rr)
    {
      rr=B;
    }
    现在:
    Achange(B);
    Bchange(A);
    那么B改变了,但是A没有变为B;
    如果直接A=B,那么改变了。
     如果说载方法内有效果,那么在执行这一段代码的时候,是不是说A曾经也改变为B
    了,但是函数结束后,又变为原来的了。
     objectA   objectB—-(内存中的对象)
       |          |
       |          |
      引用A     引用B
    那么Achange(my)改变了参数所指向的对象(没有改变引用(内存地址))
    那么Bchange(my),用B来赋值给A,也就是说让A也指向了objectB
      

  6.   

    谢谢详细的答案,
     你说的例子是传递的基本数据类型!
    class my
    {
    int i=0;
    }
    my A=new my();
    my B=new my();
    void Achange(my rr)
    {
      rr.i=5;
    }
    void Bchange(my rr)
    {
      rr=B;
    }
    现在:
    Achange(B);
    Bchange(A);
    那么B改变了,但是A没有变为B;
    如果直接A=B,那么改变了。
     如果说载方法内有效果,那么在执行这一段代码的时候,是不是说A曾经也改变为B
    了,但是函数结束后,又变为原来的了。
     objectA   objectB—-(内存中的对象)
       |          |
       |          |
      引用A     引用B
    那么Achange(my)改变了参数所指向的对象(没有改变引用(内存地址))
    那么Bchange(my),用B来赋值给A,也就是说让A也指向了objectB
      

  7.   

    有一个类a,它有属性b,现在a.b=1;
    void m(Object a){
     a.b=2;
    }//这时对属性b的改变是永久的,即方法内外均有效。因为a的内存位置并没有改变,改变的仅仅是它的一个属性(属性并没有做为参数引用)。所以内外有效
      

  8.   

    是不是说
    载函数里面
    {
    A=B;
    }
    其实是试图改变引用A而不是试图改变A所指的对象,
    那么,如果要在函数里面交换两个对象怎么办??
      

  9.   

    实现cloneable接口,调用clone()方法