拜讀陳錦輝先生的Java初學指引,裡面有提到我們常見的Java問題,就是Java是否有傳參考
呼叫呢?
依照書本的說明,Java沒有實際的傳參考呼叫,頂多是傳參考值呼叫,原因在於共用記憶
體的觀念,例如在C++內的被呼叫端其宣告方式會是:
void func(int &a, int b){
.............
}
而呼叫端 func(m,n)
關於int &a的a代表的就是m,&a = m的記憶體位址,他們倆者共用了同一塊記憶體位址,
主要是藉由提取運算子(&)的關係,因此在func操作&a會影響m本身。示意圖如下:
而Java之被呼叫端public static void swap(Classtype obj1, Classtype, obj2),而呼叫端
Classtype.swap(i, j),i => Classtype i;j => Classtype j等宣告。
i與obj1的關係為,i內存放的參考複製一份給其他記憶體位址下的obj1
因此obj1與obj2就算其內容(參考)互對調,也不會影響到 i , j的參考,但由於obj1, obj2
掌握了i , j的參考,因此可以去變更該參考下的屬性的value值(如i.x = 20),如同陣列的觀念
一樣。示意圖如下:
純屬個人的學習心得,如果想要清楚瞭解可以翻閱陳錦輝先生的Java初學指引及C語言初
學指引,個人認為兩本都是好書,觀念都講得很清晰。
留言
張貼留言