作者tkcn (小安)
看板java
标题Re: [问题] 一个很简单程式问题
时间Mon Mar 27 12:53:57 2006
※ 引述《windincloud (云淡风轻)》之铭言:
: 好奇~ 有always吗?
: 只是预设为call by value吧~
: 写程式时也可以用referance~
: 原句应该改usually较好吧~
Java 真的只有 call by value
以下转录一篇以前写的文章
---
不管是在 C++ 还是 JAVA,时常会出现 reference
这个名词,特性与 pointer 有些类似,那其中的
差别到底在哪呢?
其一是安全性。pointer 可以用加减法指向其他记
忆体位址(例如 *(pa+1) ),而在 reference 中这
是不被允许的。另外像是型别检查,pointer 无法
动态的检查所指向的位址是否为对应的型态,同样
的,在reference 中,这类问题也不会发生。
其二就是易用性。使用 reference 较 pointer 来
得直觉且方便,不需要加上繁杂的指标运算子。
而在实做上,其实 reference 骨子里仍然是透过
pointer 达成目的,只是 compiler 将它包装起来
,让使用者看起来似乎是直接操作物件。
接下来是两个迷思,为什麽有人说
"java 没有 pass by reference" 以及
"c++ 没有 pass by address (pointer)"?
其实这两者是相同的问题。
在 java 中,所有的物件变数都是 reference,而
在传递物件时,其实只是将 reference 所指向的
位址,复制到 formal parameter。所以对变数本
身而言,其实这只是 pass by value 而已。
同样的,在 c++ 中传递 pointer 时,对於指标本
身,也只是将位址复制给 formal parameter 罢了。
不过对於这两句话,我个人却有一点不同的看法。
对於变数本身来说,确实只是 pass by value,但
是之所以传递 reference 或着 pointer,目的也
都是为了操作物件。而以物件的角度来看,这样传
递参数的方式,确实是符合 pass by reference
或着 pass by address 的特性。所以个人认为,
不太需要拘泥於 "没有 pass by address" 这种说
词。
---
有错请指正
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.68.145