1. 程式人生 > >Java方法中通過傳遞引數改變變數的值

Java方法中通過傳遞引數改變變數的值

剛在寫一個用例,需要在方法中改變傳遞的引數的值,可是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 
         */  
    }  
}