方法参数中pass by reference(传引用)和 pass by value(传值)的区别
如果你把一個名為foo的對象作為參數傳給某個函數,那么「對參數賦值」意味改變foo,使它引用(參考、指涉、指向)另一個對象。如果你在「被傳入對象」身上進行什么操作,那沒問題,我也總是這樣干。我只針對「foo 被改而指向(引用)完全不同的另一個對象」這種情況來討論:
void aMethod(Object foo)
{
??? foo.modifyInSomeWay(); // that's OK
??? foo = anotherObject; // 麻煩來了!
}
我之所以不喜歡這樣的作法,因為它降低了代碼的清晰度,而且混淆了pass by value(傳值)和pass by reference(傳址)這兩種參數傳遞方式。Java 只采用pass by value傳遞方式,我們的討論也正是基于這一點。在pass by value 情況下,對參數的任何修改,都不會對調用端造成任何影響。那些用過pass by reference 的人可能會在這一點上犯胡涂。
另一個讓人胡涂的地方是函數本體內。如果你只以參數表示「被傳遞進來的東西」,那么代碼會清晰得多,因為這種用法在所有語言中都表現出相同語義。
在Java中,不要對參數賦值;
當然,面對那些使用「輸出式參數」(output parameters)的語言,你不必遵循這條規則。不過在那些語言中我會盡量少用輸出式參數。
總結
以上是生活随笔為你收集整理的方法参数中pass by reference(传引用)和 pass by value(传值)的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络多项式的定义,多项式的定义与概
- 下一篇: Java 领域从传统行业向互联网转型你必