java参数是如何传递的,第1张

java参数是如何传递的,第2张

一般来说,计算机语言向子程序传递参数有两种方式。第一种方法是按值调用。此方法将参数值复制到子例程的形参中。这样,更改子例程的参数不会影响调用它的参数。传递参数的第二种方法是引用调用。在这个方法中,参数的引用(而不是参数值)被传递给子例程参数。在子例程中,该引用用于访问调用中指定的实际参数。这样,子程序参数的变化就会影响调用子程序的参数。您将看到,Java将根据传递的对象使用这两种不同的方法。

在Java中,当您将简单类型传递给方法时,它是通过值传递的。因此,接收参数的子程序参数的改变不会影响该方法。例如,看看下面的程序:

//简单类型通过值传递。
类测试{


void meth(int i,int j){ I * = 2;j/= 2;

}
}
类调用方式值{


public static void main(String args[]){
Test ob = new Test();


int a = 15,b = 20

System.out.println("调用前的a和b:"+a+" "+b);

ob.meth(a,b);

System.out.println("调用后的a和b:"+a+" "+b);
}
}

该程序的输出如下:

通话前的a和b:15 20
通话后的a和b:15 20


正如您所看到的,meth()中发生的操作不会影响调用中A和B的值。在本例中,它们的值没有更改为30和10。

当您将一个对象传递给一个方法时,这种情况会发生巨大的变化,因为该对象是通过引用传递的。记住,当你创建一个类类型的变量时,你只是创建了一个类的引用。因此,当您将此引用传递给方法时,接收它的参数将指向该参数所指向的同一对象。这有力地证明了对象是通过引用调用传递给方法的。此方法中对象的更改确实会影响作为参数的对象。例如,考虑下面的程序:
//对象通过引用传递。

类测试{ int a,b;
Test(int i,int j){ a = I;b = j;
}
//传递一个对象
void meth(Test o) {

o . a * = 2;

o . b/= 2;

}
}


class call ByRef { public static void main(String args[]){ Test ob = new Test(15,20);

System.out.println("调用前ob.a和ob . b:"+
ob . a+" "+ob . b);


ob . meth(ob);

System.out.println("调用后ob.a和ob . b:"+
ob . a+" "+ob . b);
}
}


该程序产生以下输出:

通话前住宿和住宿:15 20
通话后住宿和住宿:30 10


正如您所看到的,在这个例子中,meth()中的操作将对象作为一个参数来影响。

有趣的是,当将对象引用传递给方法时,引用本身是通过按值调用来传递的。但是,因为传递的值指向一个对象,所以该值的副本仍然指向其对应参数所指向的同一对象。

注意:当一个简单类型被传递给一个方法时,使用的是按值传递。对象是通过引用传递的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » java参数是如何传递的

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情