jjhou@jjhou.com http://www.jjhou.com http://jjhou.csdn.net 5
Reference in C++ and in Java
void func1(Cls* pobj) { pobj->xxx(); }
void func2(Cls obj) { obj.xxx(); }
void func3(Cls& obj) { obj.xxx(); }
Cls obj;
func1(&obj);
func2(obj);
func3(obj);
void func1(Cls* pobj) { pobj->xxx(); }
void func2(Cls obj) { obj.xxx(); }
void func3(Cls& obj) { obj.xxx(); }
Cls obj;
func1(&obj);
func2(obj);
func3(obj);
reference
通常不用於變數的修飾,
而用於參數和回返型別的修飾。
使用
by reference
時,既享受
by pointer
的好處,又保持介面和
by value
時不變。
呼叫端介面相同,很好。
介面不同,困擾。
被呼叫端寫法相同,很好。
新建的
objects
乃配置於㆒塊被稱為
heap
的系統記憶體㆗。
所有
objects
都經由
object references
進行存取。任何看起
來持有
object
的變數,事實㆖內含的是㆒個「指向該
object
」的
reference
(此處可稱之為址參器)。這種變數
的型別被稱為
reference
型別,對比於基本型別(其變數
儲存的是該型別的值)。
Object references
如果不指向任
何
object
,即為
null
。
大部分時候你可以模糊對待「實際的
objects
」和
「
references to objects
」之間的區別。當你真正的意思是
「傳遞㆒個
object reference
給某函式」時,你可以說成
「傳遞㆒個
object
給某函式」。只有在兩者的區別造成
影響時我們才謹慎對待之。大部分時候你可以互換使用
object
和
object reference
這兩個詞。
Java
有指標嗎?比較精確的說法是,
Java
有指標。是的,
Java
之㆗除了基本型別,每個
object
的識別名稱都是指
標。但它們的作用是受限的,不僅受到編譯器的保護,
也受執行期系統的保護。換句話說
Java
有指標但是沒
有指標運算。這正是
reference
,可被想像為安全的指標。
那麼,
Java
是
pass by value
抑或
pass by reference
呢?
评论3