值传递:值传递是针对基本数据类型而言的,是指在调用函数时将实际参数复制 一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。例:
public class Test1 { public static void main(String[] args) { int num = 321; System.out.println(num); //321 change(num); System.out.println(num); //321 } public static void change(int a) { a = 123; } }上例中,调用change()函数时是将整型变量num的值复制给了a,这个时候num和a都是321;在change()函数中又将123赋值给了a,这个时候a变成了123,而num还是321,因此两次打印结果都是321。
引用传递:引用传递是针对引用数据类型而言的,是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。例:
public class Test1 { public static void main(String[] args) { int[] num = {321}; System.out.println(num[0]); //321 //数组也是一种引用数据类型,因此这里是引用传递 change(num); System.out.println(num[0]); //123 } public static void change(int[] a) { a[0] = 123; } }上例中,调用change()函数时是将数组num的地址复制给了a,这个时候数组num和数组a的地址是一样的;在change()函数中将123赋值给了数组a的第一个元素,由于num和a指向的是同一个数组,因此相当于数组num的第一个元素也变成了123,所以两次打印结果不同。
两者其实并没区别,引用传递其实也是值传递,只不过该“值”是一个地址,调用函数时同样是将该“值”复制给了函数的参数
