[問題] java的call by reference

看板java作者時間14年前 (2010/04/07 19:26), 編輯推噓6(6011)
留言17則, 12人參與, 最新討論串1/4 (看更多)
首先 先來個簡單到爆表的程式 大家都知道 下面的程式一定會發生 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不是這樣運作的???? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.48.108

04/07 19:34, , 1F
我的理解是 java 的 pass by ref 是指該參考所指向的物件
04/07 19:34, 1F

04/07 19:36, , 2F
而不是指該參考本身 pass by ref
04/07 19:36, 2F

04/07 22:28, , 3F
java是不折不扣的call by value 參考Thinking in Java
04/07 22:28, 3F

04/07 23:12, , 4F
Java是call by ref這個說法是從哪裡冒出來的呢?突然好奇
04/07 23:12, 4F

04/07 23:26, , 5F
java"只有" call by value
04/07 23:26, 5F

04/07 23:27, , 6F
樓上認真的嗎????????????
04/07 23:27, 6F

04/07 23:59, , 7F
http://tinyurl.com/ybupv9c Thinking In Java 2/e, 附錄A
04/07 23:59, 7F

04/08 00:11, , 8F
我知道只有 call by value,只是不懂 ref 說法何來
04/08 00:11, 8F

04/08 00:15, , 9F
見山是山,見山不是山,見山還是山
04/08 00:15, 9F

04/08 00:57, , 10F
閱讀 qrtt1 提供的文章者,應至少讀到 page 1018.
04/08 00:57, 10F

04/08 07:51, , 11F
歡迎使用/推薦置底文的 reference
04/08 07:51, 11F

04/08 12:41, , 12F
這個話題要配 yfvwx7y 當背景音樂… XD
04/08 12:41, 12F

04/08 21:42, , 13F
對於primitive type 是call by value
04/08 21:42, 13F

04/08 21:47, , 14F
對於reference type 是call by reference "value"
04/08 21:47, 14F

04/08 21:50, , 15F
Java在這點的運作上和C/C++一點都不一樣
04/08 21:50, 15F

04/15 04:32, , 16F
Java 只有CBV reference type 是物件產生以後丟到heap裡
04/15 04:32, 16F

04/15 04:38, , 17F
new會去尋找heap的obj分配一個指標value對應給instance
04/15 04:38, 17F
文章代碼(AID): #1Bl6lUN1 (java)
文章代碼(AID): #1Bl6lUN1 (java)