java语言中,成员方法中可以有多个不同数据类型的参数,也可以一个没有。对于参数我们需要区分形式参数和实际参数的概念。形式参数是指定义成员方法时,括号里面的参数名字。实际参数是指在程序代码中调用成员方法时,传递给方法的参数。

1 基本数据类型形式参数的值传递

示例如下:

public class Demo1 {

   public static void main(String[] args) {

       int a=4,b=5;

      System.out.println("运算前实参:a="+a+" "+"b="+b);

      Test c=new Test();

      c.test(a, b);

      System.out.println("运算后实参:a="+a+" "+"b="+b);

   }

}

class Test

{

   public void test(int x,int y)

   {

      System.out.println("运算前形参:x="+x+" "+"y="+y);

      x=x-1;//改变形参x的值

      y=y+1;//改变形参y的值

      System.out.println("运算后形参:x="+x+" "+"y="+y);

   }

}

运算结果:

运算前实参:a=4 b=5

运算前形参:x=4 y=5

运算后形参:x=3 y=6

运算后实参:a=4 b=5

从结果看出,两个实际参数在运算前后都没有发生变化,而形式参数的值则发生了改变,说明基本类型参数是单向值传递。

2 引用类型形式参数的引用传递

程序中经常需要把一个对象作为实际参数进行传递,这和基本类型数据的值传递情况不同,因为此时传递的是对象的引用(地址)。当实参对象的引用(地址)被复制给形参时,对形参对象内容进行改变也就是对实参对象内容进行改变。

示例如下:

public class Demo2 {

   public static void main(String[] args) {

      Test a=new Test();

      int b=3;

      System.out.println("运算前实参:a.v="+a.v+" "+"b="+b);

      Test1 c=new Test1();

      c.test1(a, b);

      System.out.println("运算后实参:a.v="+a.v+" "+"b="+b);

   }

}

class Test

{

   int v=0;

}

class Test1

{

   public void test1(Test x,int y)

   {

      x.v=2;

      y=4;    

     }

}

运算结果:

运算前实参:a.v=0 b=3

运算后实参:a.v=2 b=3

从结果可以看出,当把对象作为方法的参数时,由于它传递的是对象的引用(地址),因此形式参数对象内容的改变会影响到实际参数,而基本类型没有影响。