本篇文章給大家帶來的內容是關於Java中值傳遞與引用傳遞(地址傳遞)之間的區別分析(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。
值傳遞(pass by value)是指在調用函數時將實際參數 複製 一份傳遞到函數中,這樣在函數中如果對 參數 進行修改,將不會影響到實際參數。傳遞對象往往為整型浮點型字元型等基本資料結構。
public class PassByValueReference {//值傳遞public static void main(String[] args) {int x = 9;pass(x);System.out.println(x);}private static void pass(int y) {System.out.println(y);y=0;}}
下為運行結果:(整型y的值變化沒有影響整型x的值)
引用傳遞(pass by reference)是指在調用函數時將實際參數的地址 直接 傳遞到函數中,那麼在函數中對 參數 所進行的修改,將影響到實際參數。(類似於共同體) 傳遞對象往往為數組等地址資料結構。
public class PassByValueReference { //引用傳遞public static void main(String[] args) {int [] x = {9}; System.out.println(x[0]);pass(x);System.out.println(x[0]);}public static void pass(int [] y) {y[0] = 0;}}
下為運行結果:(數組y的值變化同時影響數組x的值)
(值傳遞與引用傳遞在電腦資料結構中用到了棧與堆的知識)
另外,如果還沒接觸Java中的函數與方法相關知識的,可簡單藉助賦值理解:(運行結果與上面類似)
public class PassByValueReference {//值傳遞(賦值非函方式)public static void main(String[] args) { int x = 9; System.out.println(x); y = x; y = 10; System.out.println(x);}}
這裡x與y就是基礎資料型別 (Elementary Data Type),賦值後把x的值傳給了y,相當於是複製了一份副本,而不是把整個x(即x地址)給了y。
public class PassByValueReference { //引用傳遞(賦值非函方式) public static void main(String[] args) {int [] x = {1};System.out.println(x[0]);int [] y = x;y[0] = 0;System.out.println(x[0]);}}
這裡x與y是數組,這次的代碼中不是簡單地令x[0]=y[0],而是直接令x=y,此指派陳述式把x的數組地址都給了y,相當於是在“同一條船上”了,一起發生變化,y[0]變了同時x[0]也改變。