参数为引用数据类型
java只有一种传递参数的方式:值传递。
在值传递中,实参的值被传给形参,方法体内对形参的任何赋值操作都不会影响到实参。
package Test;
import java.util.Arrays;
public class Demo1 {
public static void main(String[] args) {
int[] num = {};
show(num);
System.out.println(Arrays.toString(num));
}
private static void show(int[] num) {
num = new int[1];
num[0] = 1;
System.out.println("show方法" + Arrays.toString(num));
}
}
输出结果
show方法[1]
[]
我们发现数组num在进行值传递时,show方法里面输出的值和主函数里的遍历结果有区别
再看一个例子
package Test;
import java.util.Arrays;
public class Demo1 {
public static void main(String[] args) {
int[] num = null;
show(num);
System.out.println(Arrays.toString(num));
}
private static void show(int[] num) {
num = new int[1];
num[0] = 1;
System.out.println("show方法" + Arrays.toString(num));
}
}
输出结果
show方法[1]
null
我们明明将实参的地址交给形参了,可输出的结果却不同?
在摇头晃脑一段时间后我恍然大悟,将错误纠正过来,如下
package Test;
import java.util.Arrays;
public class Demo1 {
public static void main(String[] args) {
int[] num = new int[1];
num[0] = 20;
System.out.println(Arrays.toString(num));
show(num);
System.out.println(Arrays.toString(num));
}
private static void show(int[] num) {
num[0] = 10;
System.out.println("show方法" + Arrays.toString(num));
}
}
输出结果
[20]
show方法[10]
[10]
我们在进入方法是的确将地址值赋给了形参,在后面我将新的对象地址将形参的地址覆盖掉了
导致后面的结果不同,而实参的地址并未改变,所以我们以这种方式对形参进行内容的修改,都是不会影响到实参的