Java - pass by reference?


    拜讀陳錦輝先生的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語言初

學指引,個人認為兩本都是好書,觀念都講得很清晰。

留言