Java方法的传参机制及堆栈传值图解
概括:若定义方法时声明了形参,调用此方法时需传入对应类型的参数。
1. 传递的参数类型是基本类型
基本类型传参时,传递的只是值,并非这个参数变量,例子如下:
public class ParameterTransfer {
/*将传入值互换的方法*/
public static void replace(int a,int b){
int temp = a;
a = b;
b = temp;
System.out.println("replace方法中a为:" + a);
System.out.println("replace方法中b为:" + b);
}
public static void main(String[] args){
int a = 6;
int b = 9;
ParameterTransfer.replace(a,b);
System.out.println("main方法中a为:" + a);
System.out.println("main方法中b为:" + b);
}
}
输出结果为:
- 解析图如下:
2. 传递的参数类型是引用类型
引用类型传参时,传递的实质上是堆中某个地址码,即传递了对堆中某个对象的引用,所以只要有方法对其进行修改,会影响到参数本身所指向的堆中的具体对象。例子如下:
class Temporary{
int a;
int b;
}
public class ParameterTransfer {
/*换值的方法,需传入一个对象*/
public static void change(Temporary ty){
int temp = ty.a;
ty.a = ty.b;
ty.b = temp;
}
public static void main(String[] args){
Temporary ty2 = new Temporary();
ty2.a = 6;
ty2.b = 9;
/*传入对象给change方法*/
ParameterTransfer.change(ty2);
System.out.println("main方法中ty2.a为:" + ty2.a);
System.out.println("main方法中ty2.b为:" + ty2.b);
}
}
输出结果为:
-
解析图如下:
-
总结:基本类型传值传递的是值,引用类型传值传递的是对对象的引用。