由于在Java中存在两种类型的数据:基本类型和引用类型。这两种类型的数据都可以作为参数进行传递。在方法中定义的变量称为形参,在调用该方法时输入的常数称为实参,并且实参和形参要匹配,主要由以下两点:
(1) 实参和形参的个数要相等。
(2) 实参和形参对应位置上的数据类型可以相互兼容,也就是说要么数据类型相同,要么实参可以自动进行了i类型转换变成形参类型。对于原始数据类型,也就是int,long,char之类的类型,是通过传值方式进行调用的,这种传递方式特点是:
(1) 他所传递的实参的值是一个复制品。
(2) 单值传递:实参本质上是一个可求值的表达式,他所求出来的值是一个基本数据类型。
(3) 单向传递: 方法内部可以改变形参的值,但这种修改不会影响对应的实参。
例如,调用一个带参数的方法时,我们修改了形参传来的值,等方法调用结束后,实参并没有随着形参变化而变化,也就是说,在参数传递过程中,该变量的值在方法调用期间会复制给形参。由于形参是方法的局部变量,它的生命周期仅仅在这个方法内,所以对形参做任何改变都不会影响该实参的值。
如果传递的是指向对象的引用,那么就会将该对象的地址传递给形参。这意味着,在方法调用期间,实参和形参都是该引用值所代表对象的名称。所以在参数传递之前,必须由实参表达式实例化一个对象,否则会出现错误。
代码剖析:以下是一个关于单向传值的实例,具体代码如下:- public class AA{
- public static void main(String[] args){
- int num;//原始数据类型int变量
- double d;//原始数据类型double变量
- char c;//原始数据类型char变量
- num=10;
- d=25.66;
- c='c';
- //打印原始变量值
- System.out.println("int is "+ num);
- System.out.println("double is "+ d);
- System.out.println("char is "+ c);
- System.out.println();
- System.out.print("setValue");
- setValue(num,d,c);//调用方法
- System.out.println("returned from setValue");
- System.out.println("int is "+ num);
- System.out.println("double is "+ d);
- System.out.println("char is "+ c);
- }
- public static void setValue(int a,double d,char c){
- System.out.println("in setValue...");
- //修改方法内部变量值
- a=0;
- d=123.66;
- c='b';
- System.out.println("a is "+ a);
- System.out.println("d is "+ d);
- System.out.println("c is "+ c);
- }
- }
复制代码 代码运行结果如下:- int is 10
- double is 25.666
- char is a
- setValue
- in setValue...
- a is 0
- d is 123.66
- c is b
- returned from setValue
- num is 10
- d is 25.666
- c is a
复制代码 解释说明:在上述示例代码中,定义了原始数据类型a,d和c。在setValue()方法调用过程中,变量a,d,c分别将值传递给了形参,并且setValue()方法分别对三个原始数据类型的形参传递过来的值进行了修改,从上面运行结果可以看出,只有在setValue()方法内部打印出来的数据发生了变化,在setValue()方法调用前和调用后,对三个变量没有任何影响。
|