在java中方法參數的傳遞,對象是傳遞引用,基本數據類型是傳遞值。而且一直一來都似乎沒有人提出過疑問。 直到最近,我在為公司基本Java開發人員編寫考試試卷的時候,我才發現,這錯了!在方法中,Java語言中對象傳遞的是地址,而不是引用,這兩個概念是有非常大的差別的,我相信熟悉c++的人都應該知道。 例如下面:假設對象Test有name的屬性。 public void call(Test t) { Test t2 = new Test(); t2.setName("cba'); t.setName("abc"); t = t2 ; }
public static void main(String[] arg) { Test obj = new Test(); call (obj) ; System.out. } 這個時候,你們可以發現,打印出來的是"abc" ,而不是"cba",原因是這樣的,在這次調用中,等于聲明了兩個變量obj , t,它們指向的是同一個地址,調用call方法,只是將obj指向的地址傳遞給了t,而obj本身并沒有傳遞過去(也就是沒有傳遞引用),當你重新賦值的時候(也就是將對象引用指向其他存儲空間),等于只影響了t,而沒有影響obj。 這樣的傳遞方式只能稱之為址傳遞,或者是引用對象傳遞,而不嫩說是傳遞引用或者引用傳遞。 我不知道這究竟屬于翻譯的錯誤,還是我們理解的錯誤。但是這樣的問題在c++中是有明顯的區分的(通過*與&)