从书上看到的关于函数的参数传递应用时几个需要注意的地方,自己看的时候有点模模糊糊,理解不是很透彻,也很容易不注意,现在拿出来跟大家分享下,希望能在你学习过程中帮助到你,同时也希望大家有补充的地方提出来,大家共同探讨共同进步。
1、基本数据类型的参数传递:
public class PassValue
{
public static void main(String[] args)
{
int x = 5;
change(x);
System.out.println(x);
}
public static void change(int x)
{
x = 3;
}
}
该程序change函数从开始到结束的过程中都没有改变main函数中x的值,所以打印结果为5.可见,基本类型的变量作为实参传递,并不能改变主程序中同名局部变量的值。
2、引用数据类型的参数传递
将上面1中程序改为:
public class PassRef {
int x;
public static void main(String[] args) {
PassRef obj = new PassRef();
obj.x = 5;
change(obj);
System.out.println(obj.x);
}
public static void change(PassRef obj){
obj.x = 3;
}
}
改后的程序的打印结果为3.这是为什么呢?这是因为引用类型数据传递的是对象的引用,而非对象本身,通过方法调用,可以改变对象的内容,但是对象的引用是不能改变的。对于数组,也属于引用类型,将数组对象作为参数传递,和上面2中的例子有同样的效果。如以下程序:
class PassRef2
{
public static void main(String[] args)
{
int[] x = new int[1];
x[0] = 5;
change(x);
System.out.println(x[0]);
}
public static void change(int[] x)
{
x[0] = 3;
}
}
改程序的打印结果为3。但是将上面传递对象引用的程序改下面的程序后,则打印结果为5,这是为什么呢?因为改后的change方法的调用对程序的功能没有起到任何作用,故x[0]的值也就没改变。
class PassRef3
{
int x;
public static void main(String[] args)
{
PassRef3 obj = new PassRef3();
obj.x = 5;
change(obj);
System.out.println(obj.x);
}
public static void change(PassRef3 obj)
{
obj = new PassRef3();
obj.x = 3;
}
}
|
|