Re: [問題] java的call by reference

看板java作者 ((short)(-15074))時間14年前 (2010/04/07 19:43), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《neigence ()》之銘言: : 首先 先來個簡單到爆表的程式 大家都知道 下面的程式一定會發生 : null pointer exception : public class Factory{ : public Factory(){ : Object obj = null; : createObject(obj); : >>exception<< System.out.println(obj.toString()); : } : public void createObject(Object obj){ : obj = new Object(); : } : public static void main(String args[]){ : new Factory(); : } : } : 這邊的例外 相當理所當然,但我最近在想 java 不是 call by reference的嗎 : 但 以下的 c++ 卻能正常運作 : #include <iostream> : class Object{ : public: : int value; : }; : void dodo(Object*& obj){ : obj = new Object(); : obj->value = 10; : } : void main(){ : Object* obj; : dodo(obj); : std::cout << obj->value; : } : 這邊我pass pointer 的 reference到 function dodo,但卻正常運作了 : 難道!?! java不是這樣運作的???? 還是用回的好了 你那段 C++ 應該是這樣: #include <iostream> class Object{ public: int value; }; void dodo(Object *obj){ //注意這一行 obj = new Object(); obj->value = 10; } int main(){ Object *obj; dodo(obj); std::cout << obj->value; return 0; } 我在前面的文章回過 java 其實只有 pass by value 所謂的 pass by reference 可以看做 pass by value of reference 寫回 C++ 其實就是這個樣子而已 推文說的 "pass by ref 是指該參考指向的物件而非參考本身" 也是這個意思 用 C++ 的話來說就是 傳的是指標值過去 效果是指向的該物件 pass by ref 只是因為 C++ 也可以將物件 pass by value 過去 才會分成 pass by value / pass by ref 來說明 java 裡面則一直都是 pass by ref of 物件 = pass by value of 參考 -- **** 說: 不要期望一個精神力差不多已經見底的人阿Orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.24.220
文章代碼(AID): #1Bl6_MZW (java)
文章代碼(AID): #1Bl6_MZW (java)