按引用傳遞的

2021-07-10 23:56:41 字數 2234 閱讀 6597

按引用傳遞的重要特點

傳遞的是值的引用, 也就是說傳遞前和傳遞後都指向同乙個引用(也就是同乙個記憶體

空間)。

示例如下:

1public classtemptest

6public static voidmain(string args)

13行 }

14classa

執行結果如下:

test1方法中的age=20

main 方法中的 age=20

理解按引用傳遞的過程——記憶體分配示意圖

要想正確理解按引用傳遞的過程, 就必須學會理解記憶體分配的過程, 記憶體分配示意圖可

以輔助我們去理解這個過程。

用上面的例子來進行分析:

( 1):執行開始, 執行第 8 行,建立了乙個 a 的例項, 記憶體分配示意如下:

main 方法中的變數 a

( 2):執行第 9 行,是修改 a 例項裡面的 age 的值,執行後記憶體分配示意如下:

main 方法中的變數 a

這是乙個 a 的例項

此時 age = 0;

這是乙個 a 的例項

此時 age = 10;

( 3): 執行第 10 行,是把 main 方法中的變數 a 所引用的記憶體空間位址, 按引用傳遞給 test1

方法中的 a 變數。 請注意:這兩個 a 變數是完全不同的, 不要被名稱相同所蒙蔽。

記憶體分配示意如下:

main 方法中的變數 a

賦值給 (按引用傳遞)

test1 方法中的變數 a

由於是按引用傳遞, 也就是傳遞的是記憶體空間的位址, 所以傳遞完成後形成的新的記憶體

示意圖如下:

main 方法中的變數 a

test1 方法中的變數 a

也就是說:是兩個變數都指向同乙個空間。

( 4):執行第 3 行,為 test1 方法中的變數 a 指向的 a 例項的 age 進行賦值, 完成後形成的

新的記憶體示意圖如下:

main 方法中的變數 a

test1 方法中的變數 a

此時 a 例項的 age 值的變化是由 test1 方法引起的

( 5):執行第4行, 根據此時的記憶體示意圖, 輸出test1方法中的age=20

( 6):執行第 11 行, 根據此時的記憶體示意圖, 輸出 main 方法中的 age=20

理解按引用傳遞的過程——記憶體分配示意圖

要想正確理解按引用傳遞的過程, 就必須學會理解記憶體分配的過程, 記憶體分配示意圖可

以輔助我們去理解這個過程。

用上面的例子來進行分析:

( 1):執行開始, 執行第 8 行,建立了乙個 a 的例項, 記憶體分配示意如下:

main 方法中的變數 a

( 2):執行第 9 行,是修改 a 例項裡面的 age 的值,執行後記憶體分配示意如下:

main 方法中的變數 a

這是乙個 a 的例項

此時 age = 0;

這是乙個 a 的例項

此時 age = 10;

( 3): 執行第 10 行,是把 main 方法中的變數 a 所引用的記憶體空間位址, 按引用傳遞給 test1

方法中的 a 變數。 請注意:這兩個 a 變數是完全不同的, 不要被名稱相同所蒙蔽。

記憶體分配示意如下:

main 方法中的變數 a

賦值給 (按引用傳遞)

test1 方法中的變數 a

由於是按引用傳遞, 也就是傳遞的是記憶體空間的位址, 所以傳遞完成後形成的新的記憶體

示意圖如下:

main 方法中的變數 a

test1 方法中的變數 a

也就是說:是兩個變數都指向同乙個空間。

( 4):執行第 3 行,為 test1 方法中的變數 a 指向的 a 例項的 age 進行賦值, 完成後形成的

新的記憶體示意圖如下:

main 方法中的變數 a

test1 方法中的變數 a

此時 a 例項的 age 值的變化是由 test1 方法引起的

( 5):執行第4行, 根據此時的記憶體示意圖, 輸出test1方法中的age=20

( 6):執行第 11 行, 根據此時的記憶體示意圖, 輸出 main 方法中的 age=20

JavaScript 按值傳遞 按引用傳遞

1 值的比較 引用的比較 首先,原始值的比較是值的比較 只有在它們值相等的時候它們才相等 比如簡單的 var a1 10 var a2 10 console.log a1 a2 true 其次,物件的比較並非值的比較 物件的比較均是引用的比較,當且僅當它們引用同乙個基物件時,它們才相等。即使兩個物件...

按值傳遞和按引用傳遞

對於基本型別而言,是按值傳遞的 基本型別儲存在棧中 基本型別引數的傳遞和基本型別的複製一樣,傳遞的是值本身 var a 1 function test x test a console.log a 1按值傳遞的意思就是形參是實參的複製,形參實參互不干擾 so,雖然在函式test中a被修改,但是並沒有...

String 按引用傳遞和陣列按引用傳遞淺見

考慮下面程式 public class immutable public static void array int a public static void main string args system.out.println a 3 array a system.out.println a 3...