按引用傳遞的重要特點
傳遞的是值的引用, 也就是說傳遞前和傳遞後都指向同乙個引用(也就是同乙個記憶體
空間)。
示例如下:
第1行public classtemptest
第6行public static voidmain(string args)
第13行 }
第14行classa
執行結果如下:
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...