首先介绍两个概念
1.形参:在定义函数时使用的参数,目的是用于接收调用该函数时传入的参数。简单理解,就是所有函数(即方法)的参数都是形参。
2.实参:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。
Java的参数传递机制:值传递
在传输实参给方法的形参的时候,并不是传输实参变量本身, 而是传输实参变量中存储的值,这就是值传递。
当传递的参数是基本数据类型时,传递的值,比如传递a=10,真实传参时,把10赋值给了形参。
当传递的参数是对象时,传递的是对象的值,也就是对象的首地址值,就是把对象的地址值赋值给了形参。
总结:
1.当基本数据类型或String类型的变量作为方法的参数传递时,形参变量的改变不会影响到实参。
2.当引用数据类型的变量作为方法的参数传递时,形参变量指向的内容发生改变后会影响到实参变量指向的内容。
3.当引用数据类型的变量作为方法的参数传递时,形参变量改变指向后再改变指向的内容时不会影响到实参变量指向的内容。
public class ArgumentTest{
public static void main(String[] args){
int b=10;
show(b);
System.out.println("b="+b);//10
System.out.println("----------------------------");
int[] brr=new int[]{10,20};
show(brr);
System.out.println("brr[0]="+brr[0]);//200
System.out.println("---------------------------");
String sb="lisi";
show(sb);
System.out.println("sb="+sb);//lisi
}
//基本数据类型
public static void show(int a){
a=200;
System.out.println("a="+a);//200
}
//引用数据类型
public static void show(int[] arr){
//arr=new int[2];//重新new一个数组之后,上面输出brr[0]=10;
arr[0]=200;
System.out.println("arr[0]="+arr[0]);//200
}
//String类型
public static void show(String sa){
sa="zhangsan";
System.out.println("sa="+sa);//zhangsan
}
}