Re: [問題] java的call by reference
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):