通过代码分析: public class ParamTest {
// 初始值为0
protected int num = 0;
// 为方法参数重新赋值
public void change( int i) {
i = 5;
}
// 为方法参数重新赋值
public void change(ParamTest t) {
ParamTest tmp = new ParamTest();
tmp. num = 9;
t = tmp;
}
// 改变方法参数的值
public void add(int i) {
i += 10;
}
// 改变方法参数属性的值
public void add(ParamTest pt) {
pt. num += 20;
}
public static void main(String[] args) {
ParamTest t = new ParamTest();
System. out.println( "参数--基本类型" );
System. out.println( "原有的值:" + t.num );
// 为基本类型参数重新赋值
t.change(t. num);
System. out.println( "赋值之后:" + t.num );
// 为引用型参数重新赋值
t.change(t);
System. out.println( "运算之后:" + t.num );
System. out.println();
t = new ParamTest();
System. out.println( "参数--引用类型" );
System. out.println( "原有的值:" + t.num );
// 改变基本类型参数的值
t.add(t. num);
System. out.println( "赋引用后:" + t.num );
// 改变引用类型参数所指向对象的属性值
t.add(t);
System. out.println( "改属性后:" + t.num );
}
}
输出结果如下:
参数--基本类型
原有的值:0
赋值之后:0
运算之后:0
参数--引用类型
原有的值:0
赋引用后:0
改属性后:20
得出结论:
1. 基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。
2. 对象和引用型变量被当作参数传递给方法时,在方法实体中,无法给原变量重新赋值,但是可以改变所指向对象的属性。至于到底它是值传递还是引用传递,这并不重要,重要的是我们要清楚当一个引用被作为参数传递给一个方法时,在这个方法体内会发生什么。
|