Java--Java只有值傳遞,沒有引用傳遞

參考傳送門:
https://www.cnblogs.com/wchxj/p/8729503.html
https://www.cnblogs.com/shangxiaofei/p/5300944.html

今天看題的時候看到了這麼一道題:
當一個對象被當做參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞呢?

這題如果對Java參數傳遞機制有了解的人就很簡單了,因爲Java中只有值傳遞,沒有引用傳遞。但是如果剛從C轉Java的人眼裏,這題就很有迷惑性了。

對於8中基本數據類型一般沒有什麼爭議,值傳遞就是將實參棧中對應的變量數據複製一份給形參,之後形參使用的一直是複製的那一份 ,不會影響到實參。

有比較大爭議的就是很多人不理解,爲什麼用對象當參數,明明調用的時候修改的改變有影響到實參,但是還是說是值傳遞呢?

首先會出現這個疑惑是因爲對值傳遞和引用傳遞的一個概念上的誤解,大多數人對值傳遞和引用傳遞的一個主要區分方法是看傳參後能否會在方法中改變值後對實參造成影響,但是實際上這兩種參數傳遞機制在Java中的區別方式根本不是這樣的!

值傳遞(pass by value)是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。

引用傳遞(pass by reference)是指在調用函數時將實際參數的地址直接傳遞到函數中,那麼在函數中對參數所進行的修改,將影響到實際參數。

但是在Java中,你將一個對象當參數傳入方法中的時候,傳入的是棧中該對象引用的複本,引用相當於地址,所以修改改引用內的值會引起所有指向該引用的值得改變。本質上還是值傳遞的。

簡單的舉個例子🌰:
在這裏插入圖片描述
在這裏插入圖片描述

以上均自己見解 ,如有錯誤歡迎指正~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章