Java中值傳遞與引用傳遞之間的區別分析(附代碼)

來源:互聯網
上載者:User
本篇文章給大家帶來的內容是關於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]也改變。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.