如果函数的参数是对象的话,你不能改变对象参数本身的值(相当于C/C++里的指针),但你能改变对象里面的值,所以还是按值传递的,譬如
void function(Day d)
{
d = new Day(...); //企图修改d本身,假如d现在指向地址0x20000,
 //没用,这值的改变传不回去
}Day d = new Day(...);//假如d指向地址0x10000
function(d);
//d还是0x10000, d里的值也没变
但如果你的函数调用d.setDate(..)的话,你就能改变d里的值
void function(Day d)
{
d.setDate(...); //d里的值变了
}Day d = new Day(...);//假如d指向地址0x10000
function(d);
//d還是0x10000, 但d里的值变了

解决方案 »

  1.   

    java里面没有指针,是按值传输的,可以看看《think in java》就知道了
      

  2.   

    Java方法调用,参数对象是复制句柄传递,可以改变对象的值,但不会改变原句柄的引用。
    例如
    public T{
    public int a=10;
    public void T(){}
    }
    试一下
    static void swapDays(T a,T b)
    {  int temp=b.a;
      b.a=a.a;
      a.a=temp;
    }
    就可以swap  a,b啦
      

  3.   

    恩!
    在shellSort程序中
    调用ArrayAlg 类的方法
      ArrayAlg.shellSort(staff)
    时候,传进方法体的是staff句柄,staff[0],staff[1]...则是staff对象的内容。
    shellSort()方法体改变的就是对象staff的内容。
    <core java2 vol1>不是有画图介绍吗?看图好理解多了。
      

  4.   

    基本类型如int等就是按值传递类对象实际传递的是复制过去的句柄(指针),所以也是按值传递,只不过这个值是对象的句柄而不是对象本身而已
      

  5.   

        JAVA中所有的參數都是按值傳送,如果傳送的是一個對象引用或對象,則把該對象引用按值傳送,即復制該引用的一個副本,由于是引用的副本,所以該副本和原引用指向同一個對象.
    理解了這句話, 應該明白了JAVA的參數機制.
      

  6.   

    因为Day 是对象,对象的付值是一种地址引用,使不能这样用的,不过你可以使用一下对象的clone()的克隆方法将这个对象传递给其他的变量!