作者LPH66 ((short)(-15074))
看板java
标题Re: [问题] java的call by reference
时间Wed Apr 7 19:43:16 2010
※ 引述《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