Java方法中通過傳遞引數改變變數的值
阿新 • • 發佈:2018-11-01
剛在寫一個用例,需要在方法中改變傳遞的引數的值,可是java中只有傳值呼叫,沒有傳址呼叫。所以在java方法中改變引數的值是行不通的。但是可以改變引用變數的屬性值。
可以仔細理解一下下面幾句話:
1、對於基本型別引數,在方法體內對引數進行重新賦值,並不會改變原有變數的值。
2、對於引用型別引數,在方法體內對引數進行重新賦予引用,並不會改變原有變數所持有的引用。
3、方法體內對引數進行運算,不影響原有變數的值。
4、方法體內對引數所指向物件的屬性進行操作,將改變原有變數所指向物件的屬性值。
也就是說,對於基本資料型別,實現的是傳值,只是個形參,不會改變原有值。對於引用資料型別,對這個引用進行操作,其實也是相當於對形參的操作,不會改變原來的引用。但是,當對這個引用的屬性進行操作的時候,相當於CPP中的傳址呼叫,可以改變這個引用的屬性的值。
舉個例子:
public class Main { private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr){ b = true; //形參,不會改變原有值 boo = new Boolean(true); //引用變數的直接操作相當於值傳遞,不會改變原來的引用變數 arr[0] = true; //引用變數的屬性的操作,會改變原有引用的屬性,相當於傳址呼叫 } //測試 public static void main(String[] args) { boolean b = false; Boolean boo = new Boolean(false); Boolean[] arr = new Boolean[]{false}; getMiddleOne(b, boo, arr); System.out.println(b); System.out.println(boo.toString()); System.out.println(arr[0]); /** * output: * false * false * true */ } }