Java-值傳遞

值傳遞是對基本型變量而言的,傳遞的是該變量的一個副本,改變副本不影響原變量。

引用傳遞一般是對於對象型變量而言的,傳遞的是該對象地址的一個副本, 並不是原對象本身 。

一般認爲,Java 內的傳遞都是值傳遞.,Java 中實例對象的傳遞是引用傳遞,Java 是值傳遞的

 

這是一個很經典的例子,我們希望在調用了 swap() 方法之後交換 arg1 和 arg2 的值,但事實上並沒有,爲什麼會這樣?

這就是因爲 Java 是值傳遞的,也就是說,我們在調用一個需要傳遞參數的函數時,傳遞給函數的參數並不是我們傳遞進去的參數本身,而是它的一個副本,我們改變了數據其實只是改變了副本的數據而已,並不會對原來的參數有任何的改變。

 

 

我們自己定義了一個內部類 Person ,該類只有一個 int 類型的 age 屬性,然後有 getter/setter ,我們希望通過 changeAge() 函數來改變 Person 對象的 age 屬性,爲什麼這次成功了呢?

你依然可以理解爲,主函數將 person 複製了一份到 changeAge 函數中去,最終還是隻改變了 changeAge 中複製的那一份參數的值,而原本的參數並沒有改變,但 changeAge 中的那一份和原本的參數指向了同一個內存區域!