Re: [問題] 一個很簡單程式問題

看板java作者 (小安)時間19年前 (2006/03/27 12:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串9/16 (看更多)
※ 引述《windincloud (雲淡風輕)》之銘言: : 好奇~ 有always嗎? : 只是預設為call by value吧~ : 寫程式時也可以用referance~ : 原句應該改usually較好吧~ Java 真的只有 call by value 以下轉錄一篇以前寫的文章 --- 不管是在 C++ 還是 JAVA,時常會出現 reference 這個名詞,特性與 pointer 有些類似,那其中的 差別到底在哪呢? 其一是安全性。pointer 可以用加減法指向其他記 憶體位址(例如 *(pa+1) ),而在 reference 中這 是不被允許的。另外像是型別檢查,pointer 無法 動態的檢查所指向的位址是否為對應的型態,同樣 的,在reference 中,這類問題也不會發生。 其二就是易用性。使用 reference 較 pointer 來 得直覺且方便,不需要加上繁雜的指標運算子。 而在實做上,其實 reference 骨子裡仍然是透過 pointer 達成目的,只是 compiler 將它包裝起來 ,讓使用者看起來似乎是直接操作物件。 接下來是兩個迷思,為什麼有人說 "java 沒有 pass by reference" 以及 "c++ 沒有 pass by address (pointer)"? 其實這兩者是相同的問題。 在 java 中,所有的物件變數都是 reference,而 在傳遞物件時,其實只是將 reference 所指向的 位址,複製到 formal parameter。所以對變數本 身而言,其實這只是 pass by value 而已。 同樣的,在 c++ 中傳遞 pointer 時,對於指標本 身,也只是將位址複製給 formal parameter 罷了。 不過對於這兩句話,我個人卻有一點不同的看法。 對於變數本身來說,確實只是 pass by value,但 是之所以傳遞 reference 或著 pointer,目的也 都是為了操作物件。而以物件的角度來看,這樣傳 遞參數的方式,確實是符合 pass by reference 或著 pass by address 的特性。所以個人認為, 不太需要拘泥於 "沒有 pass by address" 這種說 詞。 --- 有錯請指正 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.68.145
文章代碼(AID): #149sznll (java)
討論串 (同標題文章)
文章代碼(AID): #149sznll (java)