Java中的傳遞方式可以分為引用傳遞和值傳遞。那么它們有什么不同呢?
// 值傳遞示例 public static void main(String[] args) { int a = 1; int b = 2; swap(a, b); System.out.println(a);//1 System.out.println(b);//2 } public static void swap(int num1, int num2) { int temp = num1; num1 = num2; num2 = temp; } // 引用傳遞示例 public static void main(String[] args) { int[] arr = {1, 2, 3}; change(arr); System.out.println(Arrays.toString(arr));//[2, 3, 4] } public static void change(int[] array) { for (int i = 0; i< array.length; i++) { array[i] += 1; } }
在值傳遞中,將對(duì)象的內(nèi)容傳遞給調(diào)用方法,被調(diào)用方法對(duì)數(shù)據(jù)進(jìn)行操作,但是對(duì)對(duì)象本身沒(méi)有影響。在上面的示例中,調(diào)用swap方法后,a和b的值沒(méi)有變化,因?yàn)樗鼈兪潜粡?fù)制的副本。
而在引用傳遞中,將對(duì)象的地址(即內(nèi)存地址)傳遞給調(diào)用方法。被調(diào)用方法對(duì)對(duì)象進(jìn)行操作,會(huì)影響到原始對(duì)象。在上面的示例中,調(diào)用change方法后,數(shù)組arr的值發(fā)生了改變,因?yàn)樗鼈冎赶虻氖峭粋€(gè)數(shù)組對(duì)象。