java中对象都是按引用传递的!

解决方案 »

  1.   

    d和day怎么不在同一地址了?
    d只不过是day在函数中的别名,指向的是同一地址。
      

  2.   

    是一个意思,对基本数据类型来说是传值change()返回后num的值不变,
    对对象d来说传的是对象引用(指针)的地址,函数返回后d指向的对象不变,
    例如你在函数内d=new Date(),返回后d并未指向新对象(引用没变),但对象成员可以改变。
      

  3.   

    可是在Core java I中 说是传值的 而且"在一个方法中 不会改变参数的值"
    且 比如 
    Date d1 = new Date( 12, 1, 2001 );
    Date d2 = new Date( 12, 1, 2002 );
    ...
    static void swap( Date d1, Data d2 );
    {
    Date temp = d1;
    d1 = d2;
    d2 = temp;
    }
    那么Class.swap( d1, d2 ) 不起作用 这是为什么?
      

  4.   

    是不起作用,其实把引用当指针来想就清楚了
    比如d1指向对象的地址为1111,d2地址为2222,在函数中地址的值交换为d1->2222,d2->1111,但返回后"在一个方法中 不会改变参数的值",所以d1又变回1111,d2变回2222,这样的话他们又指向原来的对象,所以d1/d2交换未成功。
      

  5.   

    heifei()多谢你的回答 马上结贴
    也就是说在swap的内部 d1和d2 确实已经交换过了 只不过在返回时又变了回来?
    这么设计是为什么呢?
      

  6.   


    static void swap( Date d1, Data d2 )中
    d1与d2只是新的变量,它们引用的是在上面定义的d1与d2的值,
    此d1,d2非彼d1,d2就象有全局变量,但有子程序中有定义了重名的局部变量!