看板 java 關於我們 聯絡資訊
首先 先來個簡單到爆表的程式 大家都知道 下面的程式一定會發生 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
LPH66:我的理解是 java 的 pass by ref 是指該參考所指向的物件 04/07 19:34
LPH66:而不是指該參考本身 pass by ref 04/07 19:36
tonytonyjan:java是不折不扣的call by value 參考Thinking in Java 04/07 22:28
james732:Java是call by ref這個說法是從哪裡冒出來的呢?突然好奇 04/07 23:12
chchwy:java"只有" call by value 04/07 23:26
slalala:樓上認真的嗎???????????? 04/07 23:27
qrtt1:http://tinyurl.com/ybupv9c Thinking In Java 2/e, 附錄A 04/07 23:59
james732:我知道只有 call by value,只是不懂 ref 說法何來 04/08 00:11
TonyQ:見山是山,見山不是山,見山還是山 04/08 00:15
sbrhsieh:閱讀 qrtt1 提供的文章者,應至少讀到 page 1018. 04/08 00:57
PsMonkey:歡迎使用/推薦置底文的 reference 04/08 07:51
AmosYang:這個話題要配 yfvwx7y 當背景音樂… XD 04/08 12:41
drema:對於primitive type 是call by value 04/08 21:42
drema:對於reference type 是call by reference "value" 04/08 21:47
drema:Java在這點的運作上和C/C++一點都不一樣 04/08 21:50
akaing:Java 只有CBV reference type 是物件產生以後丟到heap裡 04/15 04:32
akaing:new會去尋找heap的obj分配一個指標value對應給instance 04/15 04:38