作者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