首頁 > Java > java教程 > java的參數傳遞(只有值傳遞沒有引用傳遞)

java的參數傳遞(只有值傳遞沒有引用傳遞)

(*-*)浩
發布: 2019-08-17 16:30:56
轉載
2908 人瀏覽過

為什麼改變引用變數的屬性值卻可以呢?請看下面的解答。

java的參數傳遞(只有值傳遞沒有引用傳遞)

java中的資料型別

#Java中資料型別分為兩大類:基本型別與參考型別。對應的,變數也分這兩種類型:基本型別和引用型別。

基本類型的變數保存原始值,也就是它所代表的值就是數值本身;

而引用型別的變數所保存的值是引用值,"引用值"指向記憶體空間的位址,代表了某個物件的引用,而不是物件本身,物件本身存放在這個引用值所表示的位址的位置。

基本型別包括:byte,short,int,long,char,float,double,Boolean,returnAddress。

引用類型包括:類別、介面類型和陣列。

java中只有值傳遞

在日常編碼中,會經常看到以下現象:

#1、對於基本型別參數,在方法體內對參數進行重新賦值,不會改變原有變數的值。

2、對於引用型別參數,在方法體內對參數重新賦予引用,不會改變原有變數所持有的引用。

3、方法體內對參數運算,不會改變原有變數的值。

4、對於參考型別參數,方法體內會對參數所指向物件的屬性進行操作,將改變原有變數所指向物件的屬性值。

舉個例子:

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
        */
    }
}
登入後複製

我們只要了解下面兩點就可以解答上面的現象了:

1、基本資料類型的數值就是數值本身,所以範例中的b的值就是false;包裝類別因為會自動裝箱拆箱,所以可以跟基本型別一樣處理,所以範例中boo的值就是false;陣列是參考型,所以arr的值就是指向該Boolean[]的引用。

2、java中只有值傳遞沒有引用傳遞,所以傳入getMiddleOne方法的三個參數分別是b的值拷貝, boo的值拷貝, arr的值拷貝。

透過上面兩點就可以清楚了,getMiddleOne方法中執行的b=true 和boo = new Boolean(true) 都是把新值賦給了他們的拷貝,所以不改變原變數的值;同樣,ar​​r[0] = true 是把true複製給了arr的拷貝所指向的數組的第一個元素,arr的值和arr的拷貝的值都是該數組的引用,所以arr的拷貝所指向的陣列和arr所指向的陣列是同一個,所以改變arr的拷貝的陣列的元素會同樣影響到原變數arr。

總結

java中只有值傳遞,基本型別傳遞的是值的副本,引用型別傳遞的是引用的副本

以上是java的參數傳遞(只有值傳遞沒有引用傳遞)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板