Java中的參數傳遞有兩種方式:傳值和傳址。
傳值是指在方法調用時,將實際參數的值復制一份傳遞給形式參數,在方法內部對形式參數的修改不影響實際參數的值,示例代碼如下:
public class ParameterPassing { public static void main(String[] args) { int x = 1; addOne(x); System.out.println(x); //輸出結果為1 } public static void addOne(int a) { a++; } }
傳址是指在方法調用時,將實際參數的引用(地址)傳遞給形式參數,在方法內部對形式參數的修改會影響實際參數的值,示例代碼如下:
public class ParameterPassing { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3}; addOne(arr); for (int i = 0; i< arr.length; i++) { System.out.println(arr[i]); //輸出結果為2 3 4 } } public static void addOne(int[] a) { for (int i = 0; i< a.length; i++) { a[i]++; } } }
需要注意的是,Java中的基本數據類型(如int、double等)都是傳值,而對象類型則是傳址。但是,如果在方法內部重新為對象賦值,那么原來的引用會被修改,不再指向原來的對象,例如:
public class ParameterPassing { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); changeString(sb); System.out.println(sb); //輸出結果為World } public static void changeString(StringBuilder s) { s = new StringBuilder("World"); } }
在上述代碼中,changeString方法中重新為StringBuilder對象賦了一個新值,實際上這個新值和原來的sb對象沒有關系,所以在方法外部輸出sb對象的值仍然是Hello。
上一篇css代碼開關燈特效
下一篇ajax中post怎么用