如果函数的参数是对象的话,你不能改变对象参数本身的值(相当于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里的值变了
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里的值变了
例如
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啦
在shellSort程序中
调用ArrayAlg 类的方法
ArrayAlg.shellSort(staff)
时候,传进方法体的是staff句柄,staff[0],staff[1]...则是staff对象的内容。
shellSort()方法体改变的就是对象staff的内容。
<core java2 vol1>不是有画图介绍吗?看图好理解多了。
理解了這句話, 應該明白了JAVA的參數機制.