您的位置:首页 > 编程语言 > Java开发

Java方法的参数传递机制

2016-09-22 08:10 176 查看
Java方法的参数传递方法只有一种:值传递。

所谓值传递,就是将实际参数的副本传入方法,而参数本身不会受任何影响。

分为基本类型参数和引用类型参数两种传递考虑

1.基本类型参数传递

例如:

package parameter;

public class FundamentalType {
public static void swap(int a,int b){
int tmp=a;
a=b;
b=tmp;
System.out.println("swap方法里,a的值是"+a+",b的值是"+b);
}
public static void main(String[] args){
int a=6;
int b=9;
swap(a, b);
System.out.println("交互结束后方法里,a的值是"+a+",b的值是"+b);
}
}
结果为

swap方法里,a的值是9,b的值是6

交互结束后方法里,a的值是6,b的值是9

可见swap()方法里a,b的值是9,6;j交换结束后变量a,b的值依然是6,9并没有改变

也就是说main()方法里的变量a,b,并不是swap方法里的a,b

实际上,当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值附给方法的形参变量,方法里操作的并不是实际的实参变量。

2.引用类型参数传递

引用类型参数传递一样采用值传递的方式,只不过是在传值的时候,将实参所指向的地址值传给了形参,并没有改变栈内存中的实参,而是改变了他们所引用的堆内存的对象,这样在形参引用堆内存中的对象时,会对堆内存的对象进行修改,看起来就像传入实参本身一样

例如:

package parameter;

class DataWrap{
int a;
int b;
}

public class ReferenceType {
public static void swap(DataWrap dw){
int tmp=dw.a;
dw.a=dw.b;
dw.b=tmp;
System.out.println("swap方法里,a成员变量的值是"+dw.a+",b成员变量的值是"+dw.b);
}

public static void main(String[] args){
DataWrap dw=new DataWrap();
dw.a=6;
dw.b=9;
swap(dw);
System.out.println("交换结束后,a成员变量的值是"+dw.a+",b成员变量的值是"+dw.b);
}
}
运行结果为

swap方法里,a成员变量的值是9,b成员变量的值是6

交换结束后,a成员变量的值是9,b成员变量的值是6

示意图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java