Java是一門面向對象的編程語言,其中參數傳遞是非常常見的操作。在Java中可以傳遞值類型的參數,也可以傳遞引用類型參數。但是在傳值類型和引用類型參數時有著很大的區別。
傳值類型參數,就是將基本類型的數據作為參數傳遞到方法中。基本類型有byte、short、int、long、float、double、char和boolean等。在傳遞值類型參數時,函數內對參數的修改不會影響到原始值類型參數的值。
public class PassValueDemo { public static void main(String[] args) { int num = 10; changeValue(num); System.out.println("num = " + num); // 輸出結果為10 } public static void changeValue(int num) { num = 5; System.out.println("num = " + num); // 輸出結果為5 } }
傳引用類型參數,就是將對象或者數組作為參數傳遞到方法中。對象和數組是引用類型,此時函數內對參數的修改會影響到原始引用類型參數的值。因為引用類型參數傳遞時,傳遞的是指針的副本。
public class PassReferenceDemo { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; changeValue(arr); for (int i : arr) { System.out.print(i + " "); // 輸出結果為2 4 6 8 10 } } public static void changeValue(int[] arr) { for (int i = 0; i< arr.length; i++) { arr[i] *= 2; } } }
在傳遞引用類型參數時需要注意,在函數內不要直接修改原始引用類型參數的指向,否則會造成內存泄漏或者誤操作:
public class PassReferenceDemoWithMistake { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; changeValue(arr); for (int i : arr) { System.out.print(i + " "); // 輸出結果為1 2 3 4 5 } } public static void changeValue(int[] arr) { arr = new int[]{2, 4, 6, 8, 10}; // 錯誤的操作,修改了原始引用類型參數的指向 for (int i = 0; i< arr.length; i++) { arr[i] *= 2; } } }
以上就是Java里的傳值和傳引用的區別。在實際編程中,需要根據具體情況選擇傳值或者傳引用類型參數。