参数传递: 在调用方法时,向方法内传入一些数据的动作,传入数据的动作就是参数传递
形式参数: 定义方法时写在小括号之内的东西
实际参数: 调用方法时,真正传入方法里的数据
1.对于基本数据类型(以及String)来说,形式参数的操作不会影响实际参数
值传递 后改变参数的值,原来的数不会改变,就相当于重新开辟一个空间,改变的是新空间的值。
public class Test {
public static void main(String[] args) {
int a = 20;
int b = 10;
System.out.println("a = " + a); //20
System.out.println("b = " + b); //10
System.out.println("----------");
//调用change方法将a和b的值传入方法内,将实际参数传给形式参数,a和b传给x和y。x和y加倍后,print,此时调用change方法返回的就是加倍后的值
change(a, b);
/*change方法调用完毕后,程序又到了main方法里,此时打印a和b的值输出a和b依旧是20, 10.即可证明形式参数x和y的改变
不会影响实际参数a和b的值
*/
System.out.println("----------");
System.out.println("a = " + a); //20
System.out.println("b = " + b); //10
}
public static void change(int x, int y) {
x *= 10;
y *= 10;
System.out.println("x = " + x); //200
System.out.println("y = " + y); //100
}
}
2.对于引用数据类型(除了String)来说,形式参数的操作会影响实际参数。
引用传递,是把引用传过去了,没有开辟空间,改变值还是原来空间的值
public class Test {
public static void main(String[] args) {
int[] array = {10, 20, 30};
System.out.println(array[0]); //10
System.out.println(array[1]); //20
System.out.println(array[2]); //30
System.out.println("---------");
change(array);
/*
对于数组类型参数,传递的是这个引用(地址值/共享信息),即方法中的数组和传递的数组是一样的。
所以,改变方法中的数组,那么方法外的数组也改变了
array和arr指的是同一个数组
*/
System.out.println("---------");
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
}
public static void change(int[] arr) {
arr[0] *= 10;
arr[1] *= 10;
arr[2] *= 10;
System.out.println(arr[0]); //100
System.out.println(arr[1]); //200
System.out.println(arr[2]); //300
}
}