java参数是如何传递的
一般来说,计算机语言向子程序传递参数有两种方式。第一种方法是按值调用。此方法将参数值复制到子例程的形参中。这样,更改子例程的参数不会影响调用它的参数。传递参数的第二种方法是引用调用。在这个方法中,参数的引用(而不是参数值)被传递给子例程参数。在子例程中,该引用用于访问调用中指定的实际参数。这样,子程序参数的变化就会影响调用子程序的参数。您将看到,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()中的操作将对象作为一个参数来影响。
有趣的是,当将对象引用传递给方法时,引用本身是通过按值调用来传递的。但是,因为传递的值指向一个对象,所以该值的副本仍然指向其对应参数所指向的同一对象。
注意:当一个简单类型被传递给一个方法时,使用的是按值传递。对象是通过引用传递的。
0条评论