我來自C/C++世界。我在很多帖子中注意到,人們不接受說在Java中有「通過引用傳遞」(對於非原語);他們的論點是,在這種情況下,採用了參考文獻的副本。我無法理解這個理由,因爲這實際上是我們通過引用傳遞(發生指針副本)時發生的事情。對於我在Java中的一點理解,我會說:在Java中通過引用與值傳遞
- 原始類型按值傳遞。
- 非原始類型通過引用傳遞。
我錯了?
我來自C/C++世界。我在很多帖子中注意到,人們不接受說在Java中有「通過引用傳遞」(對於非原語);他們的論點是,在這種情況下,採用了參考文獻的副本。我無法理解這個理由,因爲這實際上是我們通過引用傳遞(發生指針副本)時發生的事情。對於我在Java中的一點理解,我會說:在Java中通過引用與值傳遞
我錯了?
在C++中,考慮功能:void func(Type &arg);
。在這裏,如果你改變arg
(不是ARG的內容,但實際的變量)的參數中傳遞改變了來電者的觀點 - 完全。這是通過參考。與void func(Type *arg);
對比。在這裏,你可以改變arg
的內容,但如果分配arg
的東西,它只是一個局部的變化,由於傳遞的價值指針。
在Java中,你使用通通過對所有複雜類型(不可見)的指針。
「(隱形)」它不是隱形的。只是對象指針的語法在Java中是不同的。 – newacct 2013-04-08 17:43:35
據我瞭解,說話的C或C++程序員,我會說是的對象指針是按值傳遞,所以在功能上可以修改原始對象,但你不能在原始參考覆蓋它。但我在Java中幾乎沒有什麼知識。 – UldisK 2013-04-08 11:12:25
在這個嚴格意義上的C語言中,C沒有引用引用*它具有「通過指針」,就像Java一樣。這與C++相反,C++通過引用真正傳遞。 – Angew 2013-04-08 11:13:15
謝謝。你是非常真實的。 C沒有通過引用傳遞。現在我明白了Java vs C vs C++的區別。 – aLogic 2013-04-08 11:21:52