淺談Java中的值傳遞和引用傳遞的區別

值傳遞:(形式參數類型是基本數據類型):方法調用時,實際參數把它的值傳遞給對應的形式參數,形式參數只是用實際參數的值初始化本身的存儲單元內容,是兩個不一樣的存儲單元,因此方法執行中形式參數值的改變不影響實際參數的值。
引用傳遞:(形式參數類型是引用數據類型參數):也稱爲傳地址。方法調用時,實際參數是對象(或數組),這時實際參數與形式參數指向同一個地址,在方法執行中,對形式參數的操做實際上就是對實際參數的操做,這個結果在方法結束後被保留了下來,因此方法執行中形式參數的改變將會影響實際參數。
在 Java 應用程序中永遠不會傳遞對象,而只傳遞對象引用。所以是按引用傳遞對象。但重要的是要區分參數是如何傳遞的,這纔是該節選的意圖。Java 應用程序按引用傳遞對象這一事實並不意味着 Java 應用程序按引用傳遞參數。參數能夠是對象引用,而 Java 應用程序是按值傳遞對象引用的。
Java 應用程序中的變量能夠爲如下兩種類型之一:引用類型或基本類型。看成爲參數傳遞給一個方法時,處理這兩種類型的方式是相同的。兩種類型都是按值傳遞的;沒有一種按引用傳遞。數組

按值傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的一個副本。所以,若是函數修改了該參數,僅改變副本,而原始值保持不變。按引用傳遞意味 着當將一個參數傳遞給一個函數時,函數接收的是原始值的內存地址,而不是值的副本。所以,若是函數修改了該參數,調用代碼中的原始值也隨之改變。
當傳遞給函數的參數不是引用時,傳遞的都是該值的一個副本(按值傳遞)。區別在於引用。在 C++ 中當傳遞給函數的參數是引用時,傳遞的就是這個引用,或者內存地址(按引用傳遞)。在 Java 應用程序中,當對象引用是傳遞給方法的一個參數時,您傳遞的是該引用的一個副本(按值傳遞),而不是引用自己。
Java 應用程序按值傳遞全部參數,這樣就製做全部參數的副本,而無論它們的類型。
 函數

相關文章
相關標籤/搜索