黑马程序员技术交流社区
标题:
Java 值传递
[打印本页]
作者:
lovecx24
时间:
2013-11-29 18:00
标题:
Java 值传递
由于在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()方法调用前和调用后,对三个变量没有任何影响。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2