Java中函數(shù)參數(shù)的傳遞可以分為兩種方式:值傳遞和引用傳遞。那么這兩種方式有什么區(qū)別呢?
值傳遞是指將一個(gè)變量的值復(fù)制給另一個(gè)變量,傳遞后對(duì)這個(gè)變量的修改不會(huì)影響到傳遞前的變量。下面看一個(gè)例子:
public class Main { public static void main(String[] args) { int a = 5; System.out.println("a="+a); changeValue(a); System.out.println("a="+a); } public static void changeValue(int a) { a = 10; System.out.println("change a to "+a); } }
執(zhí)行結(jié)果:
a=5 change a to 10 a=5
可以看到,雖然在changeValue()函數(shù)中修改了a的值,但是在傳遞前和傳遞后的a是兩個(gè)獨(dú)立的變量,傳遞后的修改并不會(huì)影響到傳遞前的變量。
引用傳遞是指將一個(gè)對(duì)象的引用復(fù)制給另一個(gè)變量,傳遞后對(duì)這個(gè)對(duì)象的引用的修改會(huì)影響到傳遞前的對(duì)象。下面看一個(gè)例子:
public class Main { public static void main(String[] args) { int[] arr = {1,2,3}; System.out.println("arr[0]="+arr[0]); changeArray(arr); System.out.println("arr[0]="+arr[0]); } public static void changeArray(int[] arr) { arr[0] = 10; System.out.println("change arr[0] to "+arr[0]); } }
執(zhí)行結(jié)果:
arr[0]=1 change arr[0] to 10 arr[0]=10
可以看到,在changeArray()函數(shù)中修改了arr[0]的值后,傳遞前和傳遞后的arr都指向同一個(gè)對(duì)象,傳遞后的修改也影響到了傳遞前的對(duì)象。
通過(guò)上面的例子可以看出,值傳遞和引用傳遞的不同之處在于,值傳遞只是將變量的值傳遞給函數(shù),兩個(gè)變量是相互獨(dú)立的,而引用傳遞是將對(duì)象的引用傳遞給函數(shù),多個(gè)變量指向同一個(gè)對(duì)象,對(duì)一個(gè)變量的修改會(huì)影響到其他變量。