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