来源:拉勾教育Java就业集训营
方法的传参过程
int max(int ia, int ib) { … … … }
int a=5;
int b=6;
int res = m.max(a,b);
- 为main方法中的变量a、b、res分配空间并初始化。
- 调用max方法,为max方法的形参变量ia、ib分配空间。
- 将实参变量的数值赋值到形参变量的内存空间中。
- max方法运行完毕后返回,形参变量空间释放。
- main方法中的res变量得到max方法的返回值。
- main方法结束后释放相关变量的内存空间。
参数传递的注意事项
- 基本数据类型的变量作为方法的参数传递时,形参变量数值的改变通常不会影响到实参变量的数值,因为两个变量有各自独立的内存空间;
- 引用数据类型的变量作为方法的参数传递时,形参变量指向内容的改变会影响到实参变量指向内容的数值,因为两个变量指向同一块内存空间
- 当引用数据类型的变量作为方法的参数传递时,若形参变量改变指向后再改变指定的内容,则通常不会影响到实参变量指向内容的改变,因为两个变量指向不同的内存空间。
- String类型作为方法的参数传递时,由于字符串存在常量池,字符串是不可变的,重新赋值相当于改变了指向,不会影响到实参变量指向内容的改变
/*
参数传递的测试
*/
public class ArgTest{
void show1(int ia){
ia=20;
System.out.println("show1方法:"+ia); //20
}
void show2(int[] arr){
arr[0]=20;
System.out.println("show2方法:"+arr[0]); //20
}
void show3(int[] arr){
arr=new int[]{20};
System.out.println("show3方法:"+arr[0]); //20
}
void show4(String str){
str="456";
System.out.println("show4方法:"+str); //456
}
public static void main(String[] args){
ArgTest at=new ArgTest();
int ib=10;
at.show1(ib); //20
System.out.println("main中 ib:"+ib); //10
int[] arr=new int[]{10};
at.show2(arr); //20
System.out.println("main中 arr:"+arr[0]); //20
int[] arr1=new int[]{10};
at.show3(arr1); //20
System.out.println("main中 arr1:"+arr1[0]); //10
String str="123";
at.show4(str);
System.out.println("main中 str:"+str); //123
}
}
基本数据类型的变量作为方法的参数传递时
引用数据类型的变量作为方法的参数传递时
引用数据类型的变量作为方法的参数传递时,若形参变量改变指向后
String类型作为方法的参数传递时,对形参重新赋值