有趣的实参与形参

来源:互联网 发布:提示我windows未能启动 编辑:程序博客网 时间:2024/06/08 18:33

一般方法的结构如下:

修饰符 返回值类型 方法名(参数列表)

{

方法体

}

我们今天主要讲的就是实参与形参传递的问题。在参数列表中的就是形式参数,简称形参。当方法调用时,形参就用被变量或者数据替换。而这些变量和数据就是实际参数,也就是实参。还有就是形参是可以选的。即可以没有参数。

 public static void swap(int x,int y)方法;其形参就是x和y。

public static void main(String[] args){

int a=1;

int b=2;

swap(a,b);//此时的a与b就是swap函数的实际参数。其本身的形参的值被a、b的值替换。

}

在调用才参数的方式时;实参的值是按值传递到方法中的形参的,即a的值给x;b的值给y。但是无论方法中的形参的值怎么变化,方法外的实参都不受影响。即当a与b把值传递给上面的swap函数中的x与y后,在swap函数中无论x与y的值怎么改变都不会影响到a与b的实际值的。这就是方法中形参改变,而实参不受影响。最后注意的是:实参形参必须是相同类型的数据类型才能传递成功。即实参a与形参x的数据类型一样,实参b与形参y的数据类型一样。

下面通过具体的例子加深理解

public class Transmit {
public static void main(String[] args) {
int a=1; 
int b=2;  //a、b是整形变量是实参
System.out.println("没交换之前a="+a+" b="+b);
swap(a,b);
System.out.println("交换之后a="+a+"  b="+b);


}
public static void swap(int x,int y){
System.out.println("在swap函数中    交换之前   x="+x+" y="+y );
int t;
t=x;
x=y;
y=t;
System.out.println("在swap函数中    交换之后x="+x+" y="+y);
}


}


结果显示为:


通过上面的例子我们可以看出,在main函数中,a、b的值初始为1、2。但是经过交换函数swap后,a、b的值并没有发生变化。但是在swap函数中,形参x、y经过实参a、b的值传递后x=1,y=2;通过中间变量t交换后x=2,y=1.

通过这个例子我们可以看出形参只在其方法函数中变化,并且其方法函数外的实参是不受影响的。我们可以理解为,实参a、b只负责把自己的数据值传递给形参x、y后就离开了,让形参x、y在其swap方法函数中进行改变,而实参a、b自己则没有进去这个swap函数中。因此实参a、b不受形参x、y的影响。因为实参本身除了传递数值外并没有在参与进去。

这是不是很有趣呢!有兴趣的伙伴们可以自己去尝试一下。